gpt4 book ai didi

sql - 重叠期 - 合并成一个连续的时间序列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:24 26 4
gpt4 key购买 nike

最近我正在处理重叠间隔问题。我有以下情况:

输入:

我有一个数据库表,其中包含这样的每月数据:

StartDate   |   EndDate   |  Value

31.07.2010 | 31.08.2010 | 4500
31.08.2010 | 30.09.2010 | 6500

还有一个包含从 - 到这样的数据的表格:

StartDate   | EndDate    |  Value

16.08.2010 | 29.09.2010 | 9500

输出:具有类似连续周期系列的新表

StartDate   | EndDate    |  Value

31.07.2010 | 15.08.2010 | 4500
16.08.2010 | 29.09.2010 | 9500
30.09.2010 | 30.09.2010 | 6500

你会如何解决这样的问题?

我的想法是合并两个表并按开始日期对它们进行排序。识别重叠周期并进行调整。

是否已经有我可以用于该目的的算法?或者有人已经解决了类似的问题?

谢谢,帕特里克

最佳答案

我认为,一般来说,这个问题可以通过选择所有可能的开始日期到一个数据集中来解决,然后对于每个开始日期,从下一行获取日期作为该期间的结束日期,如下所示:

;with cte(StartDate) as (
select distinct StartDate from Table1
union
select distinct EndDate from Table1
union
select distinct StartDate from Table2
union
select distinct dateadd(dd, 1, EndDate) from Table2
), cte2 as (
select
StartDate,
row_number() over(order by StartDate asc) as rn
from cte
)
select
c.StartDate,
case
when c2.rn = max(c2.rn) over() then c2.StartDate
else dateadd(dd, -1, c2.StartDate)
end as EndDate
from cte2 as c
inner join cte2 as c2 on c2.rn = c.rn + 1

sql fiddle demo

此代码适用于 SQL Server,答案还取决于周期结束是否可能等于下一个周期的开始,但您可以得到一般的想法。

关于sql - 重叠期 - 合并成一个连续的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157634/

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