|
|
|
|
公众号矩阵

SQL中的时间重叠问题

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

作者:丶平凡世界 来源:SQL数据库开发|2021-11-19 08:12

问题描述

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

具体问题

有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 --排除与自身时间相等的值 

结果如下:

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

【编辑推荐】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区
  2. 从零实现基于Linux socket聊天室-增加数据库Sqlite功能-5
  3. 聊聊 MySQL 中的游标
  4. 一文讲清MySQL中的二级索引
  5. MySQL innodb的B+树到底长什么样,为什么MySQL要这样设计?
  6. mysql数据库基础技能全程实战
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

57人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

视频课程+更多

强哥带你学习docker

强哥带你学习docker

讲师:周玉强27435人学习过

OCP培训 Oracle 12c/18c/19c/2019 OCP认证培训实战教程【会员2折秒杀】

OCP培训 Oracle 12c/18c/19c/2019 OCP认证培

讲师:风哥56653人学习过

Java代码审计系列课程

Java代码审计系列课程

讲师:Hack_Man2184人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微