Oracle分组不止一次发生

时间:2019-06-05 15:13:05

标签: oracle grouping dimension

我需要以下解决方案

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 :(得分:0)

这是一个gaps and islands问题。

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