我试图对连续日期块的数量进行排名,但最好的方法是什么?下面的示例显示前3个块是连续的,然后4个在它们之间有一个月,所以计数将再次开始。
数据我试图订购:
StartDate | EndDate |Rank
----------+-----------+----
01/01/2016| 01/02/2016| 1
01/02/2016| 01/03/2016| 2
01/03/2016| 01/04/2016| 3
01/05/2016| 01/06/2016| 1
答案 0 :(得分:1)
您可以通过识别分组的开始位置,执行累计和以识别组,然后是行号来执行此操作:
select t.*,
row_number() over (partition by grp order by startdate) as rank
from (select t.*,
sum(case when tprev.startdate is null then 1 else 0 end) over (order by startdate) as grp
from t left join
t tprev
on t.startdate = tprev.enddate
) t;
此特定SQL适用于您提供的数据。它不会处理重叠超过一天的数据,也不会处理同一天开始的多个记录。这些都可以处理。如果您的数据更类似,请询问另一个问题,并在其中包含相应的数据。