gpt4 book ai didi

sql-server-2005 - 合并连续时间记录的查询

转载 作者:行者123 更新时间:2023-12-04 07:15:41 24 4
gpt4 key购买 nike

我有一个这样的表:

id     START_DATE   end_date
1 01/01/2011 01/10/2011
2 01/11/2011 01/20/2011
3 01/25/2011 02/01/2011
4 02/10/2011 02/15/2011
5 02/16/2011 02/27/2011

我想合并 start_date 是另一条记录的 end_date 的第二天的记录:所以结束记录应该是这样的:

new_id     START_DATE   end_date
1 01/01/2011 01/20/2011
2 01/25/2011 02/01/2011
3 02/10/2011 02/27/2011

我知道这样做的一种方法是创建一个基于行的临时表,其中各种行作为日期(每个记录一个日期,在天数的总范围之间),从而使表变平。

但是必须有一种更简洁的方法来在单个查询中执行此操作...例如使用 row_num 的东西?

谢谢你们。

最佳答案

declare @T table
(
id int,
start_date datetime,
end_date datetime
)

insert into @T values
(1, '01/01/2011', '01/10/2011'),
(2, '01/11/2011', '01/20/2011'),
(3, '01/25/2011', '02/01/2011'),
(4, '02/10/2011', '02/15/2011'),
(5, '02/16/2011', '02/27/2011')

select row_number() over(order by min(dt)) as new_id,
min(dt) as start_date,
max(dt) as end_date
from (
select dateadd(day, N.Number, start_date) as dt,
dateadd(day, N.Number - row_number() over(order by dateadd(day, N.Number, start_date)), start_date) as grp
from @T
inner join master..spt_values as N
on N.number between 0 and datediff(day, start_date, end_date) and
N.type = 'P'
) as T
group by grp
order by new_id

您可以使用 numbers table而不是使用 master..spt_values

关于sql-server-2005 - 合并连续时间记录的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520556/

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