等于 1 SQL 的三个连续行

Three consecutive rows that equal 1 SQL

我有姓名、时间和事件的列表(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 行(按时间排序)且事件为 1 的名称。

我试过玩 row_numbers 但如果中间输入 0 我无法重置它。关于做什么的任何想法?

有多种方法可以做到这一点。一种不错的方法是使用不同的行号来定义相同的连续事件值组。一个你有组,剩下的只是聚合:

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;