在 SQL 中动态识别时间段

Identify dynamically time periods in SQL

我在某个数据中寻找识别时间段table。

这是一个 table 数据(蓝色):

我想再创建 3 个列(红色):

暂时没有解决办法... 感谢您的帮助!

更新:2020 年 11 月 23 日 @GMB 的解决方案很好,非常感谢

另一个问题:如果同一日期有 2 行,我想:

这是一个空岛问题。您可以使用行号之间的差异来识别组,然后跨组和组内:

select employee, date, motif, duration,
    case when motif = 'MALA' then 1 else 0 end as flag,
    dense_rank() over(partition by employee order by rn1 - rn2) period,
    row_number() over(partition by employee, rn1 - rn2 order by date) as cumul
from (
    select t.*, 
        row_number() over(partition by employee order by date) rn1,
        row_number() over(partition by employee, motif order by date) rn2
    from mytable t
) t