暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL中的时间重叠问题

SQL数据库开发 2021-11-19
1133

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货

SQL专栏

SQL基础知识第二版
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' EndtimeUNION ALLSELECT 2,'13:20','15:20'UNION ALLSELECT 3,'10:00','14:00'UNION ALLSELECT 4,'13:55','16:25'UNION ALLSELECT 5,'14:00','17:45'UNION ALLSELECT 6,'14:05','17:45'UNION ALLSELECT 7,'18:05','19:45')--查询代码SELECT DISTINCT b.* FROM Meeting tJOIN Meeting b ON t.Starttime<=b.EndtimeAND t.Endtime>=b.StarttimeAND b.ID <> t.ID --排除与自身时间相等的值

结果如下:


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


最后给大家分享我写的SQL两件套:《SQL基础知识第二版》《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。


有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行

数据前线


后台回复关键字:1024,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群


推荐阅读

文章转载自SQL数据库开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论