【问题标题】:Add a counter based consecutive dates添加基于计数器的连续日期
【发布时间】:2020-11-05 22:53:39
【问题描述】:

我有一个员工表,其中包含员工姓名和员工休假的日期。我的任务是确定连续休假 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)

【问题讨论】:

  • 这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像。

标签: sql sql-server datetime counter gaps-and-islands


【解决方案1】:

这是一个间隙和岛屿问题:岛屿代表连续几天的叶子,您要枚举每个岛屿的行。

这是一种使用日期差异与单调递增计数器来构建组的方法:

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

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多