如何识别不间断序列的开始和结束?

How can I identify start and end of uninterrupted sequences?

我有一个按 TITLETIME 排序的事件列表,例如:

TITLE   |TIME
A       |11:59
A       |12:00
A       |12:01
A       |12:02
A       |12:03
B       |12:04
B       |12:05
B       |12:06
B       |12:07
B       |12:14
B       |12:15
B       |12:16

我想计算序列的 STARTEND。序列是一组事件,其中分钟数相互跟随,相同 TITLE,例如:

TITLE   |START  |END
A       |11:59  |12:03
B       |12:04  |12:07
B       |12:14  |12:16

假设支持所有 window 功能,您可以使用 lag 和 运行 总和来根据 1 分钟的时差分配组。

select title,min(time) as start_time,max(time) as end_time 
from (select title,time,sum(col) over(partition by title order by time) as grp
      from (select title,time,
            case when lag(time) over(partition by title order by time) - time = 1 
            /*change this calculation for 1 minute time difference*/
            then 0 else 1 end as col
            from tbl
           ) t
     ) t
group by title,grp

另一种方式是

select title,min(time),max(time) 
from (
select title,time,
time-row_number() over(partition by title order by time) as grp
/*change this calculation to subtract row_number from time*/
from tbl
) t
group by title,grp