我正在通过SSMS使用SQL Server 2008,需要完成新近度计算。
我有一个ID和访问日期,我正在尝试根据日期组确定新近度计数。
源数据如下所示:
ID Visit-Date
1234 1/1/2017
1234 2/1/2017
12345 3/1/2017
1234 4/1/2017
12345 5/15/2017
1234 6/1/2017
1234 7/1/2017
12345 8/1/2017
1234 9/1/2017
最终输出如下:
Recency ID-Count
1 Day 100
3 Days 20
7 Days 50
15 Days 10
30 Days 20
90 Days 5
180 Days 200
280 Days 150
365 Days 500
如果在1天和7天内出现身份证,则只会计入最近一次出现的事件...... 1天。
谢谢!
答案 0 :(得分:1)
首先,按id
汇总数据,以获取每个id
的最长访问日期。然后计算过去的天数并按以下方式汇总:
select (case when datediff(day, maxvd, getdate()) <= 1 then '1 Day'
when datediff(day, maxvd, getdate()) <= 3 then '3 Day'
. . .
end) as recencygrp, count(*)
from (select id, max(visitdate) as maxvd
from t
group by id
) t
group by (case when datediff(day, maxvd, getdate()) <= 1 then '1 Day'
when datediff(day, maxvd, getdate()) <= 3 then '3 Day'
. . .
end) ;