需要拉动客户及其各种销售活动 - 仅当特定活动类型曾经发生过时



我正在使用SSMS创建一个" Lead follow - up "报告,以监控销售代表对销售线索的跟进情况。

目标:在今年的活动中吸引所有客户所有的活动后的领导。(如果有多个线索,那么在第一个之后的所有活动。)

我能够拉所有的客户与线索,但我的代码是拉所有的活动(之前&在领先之后)。我需要它在"Lead"活动之后拉活动。如果客户有多个"Lead",则第一个"Lead"之后的所有活动。

下面是表格示例&我试过的:

表1:客户(c)

tbody> <<tr>1314
AcctID CustomerName
11鲍勃的轮胎
12Ned的指甲
好吃
余烬

下面的方法使用MIN作为窗口函数和大小写表达式来基于Lead活动进行过滤,以确定该帐户(由AcctId划分)在一年中最早的领先活动。然后使用case表达式创建is_valid_lead_item,该表达式检查当前活动日期是否在最早的前置日期之后。CTElead_activities还基于WHERE子句中最早考虑的数据进行过滤。最后,它将连接到客户表,以包括客户详细信息,同时还进行过滤,仅包括该年度第一个主要活动之后的活动。

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

查看db-fiddle的演示

让我知道这是否适合你。

最新更新