Группировка Oracle происходит более одного раза - PullRequest
1 голос
/ 05 июня 2019

Мне нужно решение по следующему

Group  Begindate enddate     
a1       1/1/2019   2/1/2019 
a1       2/1/2019   3/1/2019
a2       3/1/2019   3/2/2019
a2       3/2/2019   3/4/2019
a1       3/4/2019   3/5/2019
a1       3/5/2019   4/1/2019

. В приведенном выше примере мне нужно получить три группы в зависимости от происшествия.Сначала появился a1, затем a2, затем a1.Мой результат должен быть таким:

group  min(begindate)
a1      1/1/2019
a2       3/1/2019
a1       3/4/2019

любая помощь приветствуется ..

1 Ответ

0 голосов
/ 05 июня 2019

Это пробелы и островки проблема.

SELECT group_id,MIN(begindate)
FROM ( SELECT t.*,ROW_NUMBER() OVER( order BY begindate
       ) - ROW_NUMBER() OVER(
            PARTITION BY group_id
            ORDER BY begindate
       ) AS seq
       FROM t
     )
GROUP BY group_id,seq
ORDER BY 2

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...