SQL中的时间重叠问题

网友投稿 946 2023-03-28

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

SQL中的时间重叠问题

问题描述

时间重叠指上下两行数据的时间段有重叠部分,现在要找出这些在时间上有重叠的记录。

具体问题

有7个会议室,每个会议室每天都有人开会,某一天的开会时间如下:

查询出开会时间有重叠的是哪几个会议室?上面预期结果是

ID

2

3

4

5

6

问题分析

为了方便分析,我们画了如下一个草图来具体描述。

图中上面部分t和下面部分b有一段是重复的,分别是b.starttime到t.endtime部分。通过数学集合的思想,我们可以得出这个重叠部分的集合关系。

t.starttime<=b.endtime

AND t.endtime>=b.starttime

上面这个数学集合的重叠部分就是我们要的找的。

具体解法

--创建测试数据 WITH Meeting AS( SELECT 1 ID,'08:00' Starttime,'09:15' Endtime UNION ALL SELECT 2,'13:20','15:20' UNION ALL SELECT 3,'10:00','14:00' UNION ALL SELECT 4,'13:55','16:25' UNION ALL SELECT 5,'14:00','17:45' UNION ALL SELECT 6,'14:05','17:45' UNION ALL SELECT 7,'18:05','19:45')  --查询代码 SELECT DISTINCT b.* FROM Meeting t JOIN Meeting b ON  t.Starttime<=b.Endtime AND t.Endtime>=b.Starttime AND b.ID <> t.ID --排除与自身时间相等的值

结果如下:

有兴趣的小伙伴可以动手做一下,兴许下次面试就遇到了。

上一篇:先睹为快:现在您可以在Raspberry Pi 4计算机上运行安卓12了
下一篇:运维管理三步走:监控、管理、再造流程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~