gpt4 book ai didi

sql - 计算/派生连续日期跨度中的第一个开始日期

转载 作者:行者123 更新时间:2023-12-04 08:54:01 27 4
gpt4 key购买 nike

我正在使用 Postgres,并且我正试图围绕如何在连续日期跨度中得出第一个开始日期的问题进行思考。例如 :-

ID | Start Date | End Date
==========================
1|2020-01-01|2020-01-31
1|2020-02-01|2020-03-31
1|2020-05-01|2020-06-30
1|2020-07-01|2020-07-31
1|2020-08-01|2020-08-31
我期待的输出是
ID | Start Date | End Date | Continous Date
===========================================
1|2020-01-01|2020-01-31|2020-01-01
1|2020-02-01|2020-03-31|2020-01-01
1|2020-05-01|2020-06-30|2020-05-01
1|2020-07-01|2020-07-31|2020-05-01
1|2020-08-01|2020-08-31|2020-05-01
基本上它应该给我一个连续日期跨度的第一个开始日期。
感谢您的意见或指示,我将如何解决此问题。不幸的是,CTE 是我可能无法接受的。

最佳答案

这是一个间隙和孤岛问题,其中孤岛被定义为一组具有连续日期的连续记录。你想要每个岛的开始。
这是一种使用 lag() 的方法检索“上一个”结束日期,然后使用累积 sum() 构建组每一个差距都会增加。

select t.*, 
min(start_date) over(partition by id, grp order by start_date) continous_date
from (
select t.*,
count(*) filter(where start_date is distinct from lag_end_date + interval '1 day') over(partiton by id order by start_date) grp
from (
select t.*,
lag(end_date) over(partition by id order by start_date) lag_end_date
from mytable t
) t
) t

关于sql - 计算/派生连续日期跨度中的第一个开始日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63945973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com