时间段重叠问题,如何用SQL求解?

简介: SQL数据库开发

问题描述

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


具体问题

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

10.jpg

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


问题分析

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

11.jpg


图中上面部分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 --排除与自身时间相等的值


结果如下:


12.jpg

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


相关文章
|
7月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_94 列出指定时间段内所有的下单产品
「SQL面试题库」 No_94 列出指定时间段内所有的下单产品
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨列出指定时间段内所有的下单产品【难度简单】​
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 27丨列出指定时间段内所有的下单产品【难度简单】​
|
SQL
SQL Server中时间段查询
/****** Script for SelectTopNRows command from SSMS ******/ select * from dbo.VehicleData20100901 where CreateDate between '2010-09-01 0...
1302 0
|
SQL 存储 数据库
SQL Server中时间段查询和数据类型转换
不知道什么时候对数据独有情种,也许是因为所学专业的缘故,也许是在多年的工作中的亲身经历,无数据,很多事情干不了,数据精度不够,也很多事情干不了,有一次跟一个朋友开玩笑说,如果在写论文的时候,能有一份独一无二的数据,那么这已经超过别人一大截,但这毕竟死空中楼阁,事与愿违的事情见多了,也就不足为其,我深知数据的重要,但却因为得不到数据而烦恼,现在想想,这又是何必呢,也许自己有了数据,反而不会经常静下心去思考,人就是这样对自己身边拥有点的东西往往关心不足,考虑不周。
729 0
SQL-时间段获取
DECLARE @DateStart DATETIME, @DateEnd DATETIME, @Date DATETIME SELECT @Date = GETDATE() --一个月的开始 SELECT @...
561 0
|
SQL
SQL时间段的查询的两种执行方法
SELECT KS_Date, KS_MetalName, KS_TopLimit, KS_BottomLimit, KS_Average, KS_ChangeFROM KS_U_SpotPriceWHERE (KS_Date BETWEEN CONVERT(da...
698 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")

热门文章

最新文章