SQL确定值的新近度

时间:2017-04-05 13:55:50

标签: sql sql-server sql-server-2008

我正在通过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天。

谢谢!

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) ;