SQL中的时间重叠问题

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

[[435860]]

问题描述

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

具体问题

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

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

ID

2

3

4

5

6

问题分析

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

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

t.starttime<=b.endtime

AND t.endtime>=b.starttime

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

具体解法

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

结果如下:

 

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

 

责任编辑:武晓燕 来源: SQL数据库开发
相关推荐

2010-09-06 14:17:04

SQL函数

2021-04-25 09:42:40

SQL递归SQL Server

2021-11-09 06:55:03

SQLServer排序

2021-04-09 10:37:40

SQL Server数据库排名

2013-07-18 18:06:53

UITableview

2009-05-26 10:21:07

2010-08-03 09:41:14

GroupSQL Server

2014-02-19 09:51:29

iOS开发时间处理

2021-11-30 10:00:01

SQL数据重复

2010-05-06 16:02:42

Oracle SQL

2023-10-26 08:38:43

SQL排名平分分区

2010-06-17 15:17:24

SQL Server

2021-04-06 11:50:30

SQL数据统计

2023-11-02 08:38:49

递归SQL用法

2023-06-05 08:36:04

SQL函数RANK()

2021-11-03 16:00:40

SQL流量序号

2010-09-07 09:38:58

DIV重叠Firefox

2010-09-24 15:46:23

SQL查询

2010-10-27 13:39:34

Oracle查询

2021-01-05 08:12:42

SQL日期Spt
点赞
收藏

51CTO技术栈公众号