给定由column1(“time”)排序的一系列事件的表:
column1 , event_type
0 , 1
2 , 1
3 , 1
8 , 2
11 , 2
15 , 1
28 , 1
33 , 1
34 , 3
41 , 3
44 , 3
50 , 3
51 , 1
60 , 1
如何按相同类型的连续事件进行分组?
event_type, begins_at, ends_at
1 , 0 , 3
2 , 8 , 11
1 , 15 , 33
3 , 34 , 50
1 , 51 , 60
我假设这可以通过窗口函数来实现,但我不知道如何。
答案 0 :(得分:0)
SELECT event_type, MIN(column1) AS begins_at, MAX(column1) AS ends_at
FROM (
SELECT column1, event_type,
ROW_NUMBER() OVER (ORDER BY column1) -
ROW_NUMBER() OVER(PARTITION BY event_type ORDER BY column1) AS groupingId
FROM table1
)A
GROUP BY A.groupingId, event_type
ORDER BY 2, 1