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

Add a counter based consecutive dates

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