点击上方SQL数据库开发,关注获取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' 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  --排除与自身时间相等的值	

结果如下:

有兴趣的小伙伴可以动手做一下,顺便说一下题目来自我的知识星球,感兴趣的可以长按文章底部二维码加入。

推荐阅读
  • 全球最有价值的10家公司(1997-2019)

  • 《长安十二时辰》走红,里面的大数据技术你不能不知道

公众号内回复1,拉你进微信交流群

长按下方二维码加入,我们的SQL训练营

点击"阅读原文",了解SQL训练营

更多推荐

SQL中如何求解时间重叠的问题?