我有一个名单,时间和事件列表(0或1):
Name Time EVENT
AA 12:36:34 PM 1
AA 12:36:59 PM 1
AA 12:37:13 PM 1
AA 12:37:24 PM 0
AA 12:38:04 PM 1
AB 12:38:16 PM 0
AB 12:38:26 PM 0
CD 12:38:56 PM 1
CD 12:39:44 PM 0
CD 1:01:51 PM 0
X 1:03:12 PM 1
YS 1:04:20 PM 0
YS 1:12:50 PM 0
我希望找到至少有3个连续行(按时间排序)且event = 1的名称。
我尝试使用row_numbers但是如果在中间输入0,我无法重置它。关于该怎么做的任何想法?
答案 0 :(得分:1)
有不同的方法可以做到这一点。一个不错的方法是行号的差异,以定义相同的连续事件值组。你有一个团体,剩下的就是聚合:
select name, min(time), max(time), count(*)
from (select t.*,
(row_number() over (partition by name order by time) -
row_number() over (partition by name, event order by time)
) as grp
from t
) t
where event = 1
group by name, event, grp
having count(*) >= 3;