gpt4 book ai didi

sql - 如何在SQL中实现链

转载 作者:行者123 更新时间:2023-12-02 18:50:50 24 4
gpt4 key购买 nike

我有一张出勤表,如下所示:

image here.

我正在尝试将人们的出席情况(编码为 ABC、DEF 等)链接在一起。我希望最终结果如下所示:显示每个出勤段/链的开始和结束日期。如果人员 A 在 2021 年 1 月 1 日到 2021 年 1 月 4 日期间参加,那么它应该显示为一行,因为它是一个连续的链。我不知道该做什么或从哪里开始。这是一种奇怪的保存考勤数据的方式。

final output

更多信息:我不知道这是否重要,但我最多可以有 20 个专栏,因为我们的最多出席人数为 20 人。所以取决于 Col20。

最佳答案

仅供记录。最好以文本形式提供示例数据。

这是一个经典的间隙与岛屿,但有一点扭曲。

在这里,我们通过一些 JSON 动态地反转您的数据(没有实际使用动态 SQL)。

示例或 dbFiddle

;with cte as (
Select AttendanceDate
,B.*
,Grp = datediff(day,0,AttendanceDate) - dense_rank() over (partition by value order by AttendanceDate)
From YourTable A
Cross Apply (
Select [Key]
,Value
From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper ))
Where [Key] not in ('AttendanceDate')
) B
)
Select [Value]
,[Start] = min(AttendanceDate)
,[End] = max(AttendanceDate)
From cte
Group By Value,Grp

返回

Value   Start       End
ABC 2021-01-01 2021-01-04
DEF 2021-01-01 2021-01-03
GH 2021-01-02 2021-01-05
DEF 2021-01-07 2021-01-08
xx 2021-01-08 2021-01-10
zz 2021-01-08 2021-01-08

关于sql - 如何在SQL中实现链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66809745/

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