我需要获取开始日期和结束日期。请帮帮我我有这样一张桌子:
| login| date_start| date_end |
|user1 | 2022-01-01| 2022-01-01|
|user1 | 2022-01-02| 2022-01-02|
|user1 | 2022-01-03| 2022-01-03|
|user2 | 2022-01-05| 2022-01-05|
|user2 | 2022-01-06| 2022-01-06|
|user1 | 2022-02-24| 2022-02-24|
|user1 | 2022-02-25| 2022-02-25|
|user1 | 2022-02-26| 2022-02-26|
预期结果:
user1 2022-01-01 - 2022-01-03
user2 2022-01-05 - 2022-01-06
user1 2022-02-24 - 2022-02-26
这是一个空白和孤岛问题。一种方法使用行号差异方法:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY date_start) rn1,
ROW_NUMBER() OVER (PARTITION BY login ORDER BY date_start) rn2
FROM yourTable
)
SELECT login, MIN(date_start) AS date_start, MAX(date_end) AS date_end
FROM cte
GROUP BY login, rn1 - rn2
ORDER BY MIN(date_start);
这是一个工作演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句