SSMS编写SQL查询本年线索为最新活动的客户账户问题求助
逻辑缺陷说明
你当前的代码只实现了「筛选每个客户今年最新的Lead记录」的逻辑,缺少了关键的校验步骤:没有验证这条最新Lead的日期,是否等于该客户今年所有活动的最晚日期,只有两者相等时,才代表Lead是最后一次活动,没有后续跟进。
拿你的样例数据举例:
- Bob's Tires的最新Lead是2021-01-05,但该客户2021-01-06还有一次电话活动,属于有后续跟进,应该排除
- Good Eats的最新Lead是2021-02-03,晚于该客户其他所有活动日期,按规则应该出现在结果中,你给出的预期结果可能存在疏漏
修正后代码
WITH activities AS ( SELECT a.*, -- 计算当前账户今年最大的Lead日期 MAX(CASE WHEN a.Activity LIKE 'Lead%' THEN a.ContactDate END) OVER (PARTITION BY a.AcctID) AS max_lead_date, -- 计算当前账户今年所有活动的最大日期 MAX(a.ContactDate) OVER (PARTITION BY a.AcctID) AS max_total_date FROM AcctActivities a WHERE a.ContactDate >= '2021-01-01' ) SELECT DISTINCT c.Name AS CustomerName, act.Activity, act.ContactDate AS Date FROM Customers c INNER JOIN activities act ON c.AcctID = act.AcctID AND act.Activity LIKE 'Lead%' -- 确保当前行是该账户最新的Lead AND act.ContactDate = act.max_lead_date -- 确保最新Lead的日期就是账户所有活动的最晚日期,即没有后续跟进 AND act.max_lead_date = act.max_total_date ORDER BY c.AcctID, act.ContactDate ASC
内容的提问来源于stack exchange,提问作者Laura Bullard
相关产品推荐
相关产品推荐

