首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中实现链

如何在SQL中实现链
EN

Stack Overflow用户
提问于 2021-03-26 01:19:36
回答 1查看 78关注 0票数 2

我有一份出席名单如下:

我试图把人们的出席联系在一起(代号为ABC、DEF等)。我希望最终的结果是这样的:显示每个环节/环节的开始和结束日期。如果A人参加从2021-01-01到2021-01-4,那么它应该显示为一行,因为它是一个连续链。我不知道该做什么,也不知道从哪里开始。这是一种保存出勤数据的奇怪方式。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 01:57:09

记录在案。最好以文本形式提供样本数据。

这是一个典型的空隙和岛屿,有点扭曲。

在这里,我们通过一些JSON (不实际使用动态SQL)动态地卸载您的数据。

示例或 dbFiddle

代码语言:javascript
复制
;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

返回

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66809745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档