问题描述
我有一个员工表,上面有员工姓名和该员工请假的日期。我的任务是确定连续休假3或5天的员工。我尝试添加row_number,但是根据连续的日期,它无法正确重新启动。我需要的计数器如下所示。有什么建议吗?
Employee Leave Date Desired Counter
John 25-Jan-20 1
John 26-Jan-20 2
John 27-Jan-20 3
John 28-Jan-20 4
John 15-Mar-20 1
John 16-Mar-20 2
Mary 12-Feb-20 1
Mary 13-Feb-20 2
Mary 20-Apr-20 1
Desired output (same as in text)
解决方法
这是一个缺口和孤岛的问题:孤岛代表连续的叶子天,而您想枚举每个孤岛的行。
这是一种使用日期差与单调递增的计数器建立组的方法:
select t.*,row_number() over(
partition by employee,dateadd(day,-rn,leave_date)
order by leave_date
) counter
from (
select t.*,row_number() over(partition by employee order by leave_date) rn
from mytable t
) t
order by employee,leave_date