需要拉动客户和他们的各种销售活动——只有在特定的 activity 类型发生过的情况下
Need to pull customers & their various sales activities-- only if a specific activity type has ever occurred
我正在使用 SSMS 创建一个 'Lead Follow-Up' 报告来监控销售代表对销售线索的跟进情况。
目标:吸引所有带线索的客户 activity 今年和所有活动都在线索之后。 (如果有多个潜在客户,则为第一个之后的所有活动。)
我能够吸引所有具有潜在客户的客户,但我的代码正在吸引所有活动(在潜在客户之前和之后)。我需要它来在 'Lead' activity 之后拉动活动。如果一个客户有多个 'Lead',那么第一个 'Lead'.
之后的所有活动
以下是示例表和我尝试过的内容:
Table 1: 客户 (c)
AcctID
CustomerName
11
Bob's Tires
12
Ned's Nails
13
Good Eats
14
Embers
Table2:活动(一)
AcctivityID
AcctID
Activity
Date
1
11
Contact Added
2021-01-01
2
11
Lead
2021-01-05
3
11
Phone Call
2021-01-06
4
12
Marketing Email
2021-02-01
5
12
Lead
2021-02-02
6
13
Lead
2021-02-03
7
13
Phone Call
2021-02-15
8
13
Sales Email
2021-02-15
9
14
Cold Call
2021-01-20
SELECT
c.CustomerName
, a.Activity
, a.Date
FROM Customer c
INNER JOIN Activities a ON c.AcctID = a.AcctID
WHERE
a.Date >= '2021-01-01'
AND c.AcctID IN (SELECT AcctID FROM Activities WHERE Activity LIKE 'Lead')
ORDER BY c.CustomerName, a.ContactDate
- 需要的结果:
CustomerName
Activity
Date
Bob's Tires
Lead
2021-01-05
Bob's Tires
Phone Call
2021-01-06
Ned's Nails
Lead
2021-02-02
Good Eats
Lead
2021-02-03
Good Eats
Phone Call
2021-02-15
Good Eats
Sales Email
2021-02-15
以下方法使用 MIN
作为 window 函数和 case 表达式,根据 Lead
活动进行过滤,以确定当年最早的潜在客户 activity帐户(由 AcctId 分区)。 is_valid_lead_item
然后使用 case 表达式创建,该表达式检查当前 activity 日期是否晚于最早的提前日期。 CTE lead_activities
还根据您最早考虑的 WHERE 子句中的数据进行过滤。最后,这将与您的客户 table 相结合,以包含客户详细信息,同时还进行过滤以仅包含当年第一个潜在客户 activity 之后的活动。
WITH lead_activities AS (
SELECT
la.*,
CASE
WHEN la.Date >= MIN(CASE WHEN la.Activity='Lead' THEN la.Date END) OVER (PARTITION BY la.AcctId) THEN 1
ELSE 0
END as is_valid_lead_item
FROM
Activities la
WHERE
la.Date > '2021-01-01'
)
SELECT
c.CustomerName,
a.Activity,
a.Date
FROM
Customer c
INNER JOIN
lead_activities a ON c.AcctID = a.AcctID AND
a.is_valid_lead_item=1
ORDER BY c.CustomerName, a.Date
让我知道这是否适合你。
我正在使用 SSMS 创建一个 'Lead Follow-Up' 报告来监控销售代表对销售线索的跟进情况。
目标:吸引所有带线索的客户 activity 今年和所有活动都在线索之后。 (如果有多个潜在客户,则为第一个之后的所有活动。)
我能够吸引所有具有潜在客户的客户,但我的代码正在吸引所有活动(在潜在客户之前和之后)。我需要它来在 'Lead' activity 之后拉动活动。如果一个客户有多个 'Lead',那么第一个 'Lead'.
之后的所有活动以下是示例表和我尝试过的内容:
Table 1: 客户 (c)
AcctID | CustomerName |
---|---|
11 | Bob's Tires |
12 | Ned's Nails |
13 | Good Eats |
14 | Embers |
Table2:活动(一)
AcctivityID | AcctID | Activity | Date |
---|---|---|---|
1 | 11 | Contact Added | 2021-01-01 |
2 | 11 | Lead | 2021-01-05 |
3 | 11 | Phone Call | 2021-01-06 |
4 | 12 | Marketing Email | 2021-02-01 |
5 | 12 | Lead | 2021-02-02 |
6 | 13 | Lead | 2021-02-03 |
7 | 13 | Phone Call | 2021-02-15 |
8 | 13 | Sales Email | 2021-02-15 |
9 | 14 | Cold Call | 2021-01-20 |
SELECT
c.CustomerName
, a.Activity
, a.Date
FROM Customer c
INNER JOIN Activities a ON c.AcctID = a.AcctID
WHERE
a.Date >= '2021-01-01'
AND c.AcctID IN (SELECT AcctID FROM Activities WHERE Activity LIKE 'Lead')
ORDER BY c.CustomerName, a.ContactDate
- 需要的结果:
CustomerName | Activity | Date |
---|---|---|
Bob's Tires | Lead | 2021-01-05 |
Bob's Tires | Phone Call | 2021-01-06 |
Ned's Nails | Lead | 2021-02-02 |
Good Eats | Lead | 2021-02-03 |
Good Eats | Phone Call | 2021-02-15 |
Good Eats | Sales Email | 2021-02-15 |
以下方法使用 MIN
作为 window 函数和 case 表达式,根据 Lead
活动进行过滤,以确定当年最早的潜在客户 activity帐户(由 AcctId 分区)。 is_valid_lead_item
然后使用 case 表达式创建,该表达式检查当前 activity 日期是否晚于最早的提前日期。 CTE lead_activities
还根据您最早考虑的 WHERE 子句中的数据进行过滤。最后,这将与您的客户 table 相结合,以包含客户详细信息,同时还进行过滤以仅包含当年第一个潜在客户 activity 之后的活动。
WITH lead_activities AS (
SELECT
la.*,
CASE
WHEN la.Date >= MIN(CASE WHEN la.Activity='Lead' THEN la.Date END) OVER (PARTITION BY la.AcctId) THEN 1
ELSE 0
END as is_valid_lead_item
FROM
Activities la
WHERE
la.Date > '2021-01-01'
)
SELECT
c.CustomerName,
a.Activity,
a.Date
FROM
Customer c
INNER JOIN
lead_activities a ON c.AcctID = a.AcctID AND
a.is_valid_lead_item=1
ORDER BY c.CustomerName, a.Date
让我知道这是否适合你。