gpt4 book ai didi

sql - 获取 T-SQL 中连续值的最大和最小日期

转载 作者:行者123 更新时间:2023-12-04 15:37:43 25 4
gpt4 key购买 nike

我有一个如下所示的日志表,我想通过获取每个 ID 的连续状态值的最小开始日期和最大结束日期来简化它。我尝试了很多窗口函数组合,但没有成功。

这是我的:

enter image description here

这是我们想看到的:

enter image description here

最佳答案

这是一个典型的间隙和孤岛问题。您想要聚合具有相同 IdStatus 的连续记录组。

不需要递归,下面是使用窗口函数解决它的一种方法:

select
Id,
Status,
min(StartDate) StartDate,
max(EndDate) EndDate
from (
select
t.*,
row_number() over(partition by id order by StartDate) rn1,
row_number() over(partition by id, status order by StartDate) rn2
from mytable t
) t
group by
Id,
Status,
rn1 - rn2
order by Id, min(StartDate)

查询通过对两个不同分区的记录进行排序(按 IdId Status ).等级之间的差异为您提供了每条记录所属的组。您可以独立运行子查询以查看它返回的内容并理解其逻辑。

Demo on DB Fiddle :

Id | Status | StartDate           | EndDate            -: | :----- | :------------------ | :------------------ 1 | B      | 07/02/2019 00:00:00 | 18/02/2019 00:00:00 1 | C      | 18/02/2019 00:00:00 | 10/03/2019 00:00:00 1 | B      | 10/03/2019 00:00:00 | 01/04/2019 00:00:00 2 | A      | 05/02/2019 00:00:00 | 22/04/2019 00:00:00 2 | D      | 22/04/2019 00:00:00 | 05/05/2019 00:00:00 2 | A      | 05/05/2019 00:00:00 | 30/06/2019 00:00:00

关于sql - 获取 T-SQL 中连续值的最大和最小日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163574/

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