如何识别不间断序列的开始和结束?
How can I identify start and end of uninterrupted sequences?
我有一个按 TITLE
和 TIME
排序的事件列表,例如:
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
我想计算序列的 START
和 END
。序列是一组事件,其中分钟数相互跟随,相同 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
我有一个按 TITLE
和 TIME
排序的事件列表,例如:
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
我想计算序列的 START
和 END
。序列是一组事件,其中分钟数相互跟随,相同 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