我需要以下解决方案
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
感谢您的帮助。
答案 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