连续三行等于1 SQL

时间:2016-02-15 14:01:50

标签: sql amazon-redshift

我有一个名单,时间和事件列表(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,我无法重置它。关于该怎么做的任何想法?

1 个答案:

答案 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;