SQL。按相同的连续元素分组

时间:2017-08-09 09:13:14

标签: sql teradata

给定由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

我假设这可以通过窗口函数来实现,但我不知道如何。

1 个答案:

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