添加基于计数器的连续日期

问题描述

我有一个员工表,上面有员工姓名和该员工请假的日期。我的任务是确定连续休假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

Demo on DB Fiddle