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 --排除与自身时间相等的值
结果如下:
有兴趣的小伙伴可以动手做一下,兴许下次面试就遇到了。
最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。
有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行
数据前线
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群
推荐阅读
常见SQL面试题知识点
SQL 中的行转列和列转行
全网最全 Python 操作 Excel库总结!(文末送书)
996加班累到肺部切除,维权之路
MySQL 常用脚本
SQL中的时间重叠问题相关推荐
- SQL 中循环、for循环、游标
我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加.修改.删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃 ...
- SQL中的case when then else end用法
2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sexWHEN '1' THEN ...
- 在SQL中使用CRL函数示例
在SQL中使用CRL函数 实验目标: 1. 在SQL中创建CRL函数,使之能够向指定的计算机发送消息 实验步骤 2. 在VS中创建类发送消息的类 3. 将以下代码黏贴进去 using System; ...
- pl/sql中三种游标循环效率对比
pl/sql中三种游标循环效率对比 - Oracle数据库栏目 - 红黑联盟 http://www.2cto.com/database/201307/224636.html 转载于:https://b ...
- SQL中内连接、外连接、交叉连接
SQL中内连接.外连接.交叉连接 SQL连接可以分为内连接.外连接.交叉连接. 数据库数据: book表 ...
- 简单介绍SQL中ISNULL函数使用方法
这篇文章介绍了SQL Server.MySQL.Oracle三种数据库中ISNULL函数的使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 SQL Ser ...
- SQL 中left join ,inner join,right join的区别
2019独角兽企业重金招聘Python工程师标准>>> sql中存在有左连接 插入 右连接 sql语句 left join ,inner join,right join 进行 wh ...
- 什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么?
什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么? 存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名 ...
- SQL中where与having的区别
SQL中where与having的区别 目录 SQL中where与having的区别 创建表 插入数据 进行聚合操作 # WHERE是在聚合之前进行数据行的过滤而HAVING实在聚合之后进行新数据的过 ...
最新文章
- 【组队学习】【34期】阿里云天池在线编程训练营
- DOCKER上运行DOTNET CORE
- MPEG4 H.264学习笔记之三 ------ 熵编码
- 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}
- 判断数组是否有重复值
- xadmin与mysql数据库_django和xadmin打造后台管理系统(一)-xadmin安装及使用
- linux网卡备份还原,CentOS6.x双网卡采用主-备份策略绑定(bond)
- Linux 查看 硬件配置
- HTML input控件
- Java简单小项目---网上订餐系统
- delphi 人脸比对_比较好的开源人脸识别软件有哪些?
- 简单说from_tensor_slices()函数
- php ansiix99mac,华擎推出X99E-ITX/ac主板,终于可以把Haswell-E装进小钢炮
- c语言编译器中输出虚线,请教:c语言中用什么命令画虚线
- 如何写互联网产品分析报告
- 未来的计算机绘画图片,电脑绘画——为想象力插上科技的翅膀 二十中附校科技社团电脑绘画作品展...
- C#-快递鸟电子面单打印API
- 金蝶EAS,KSQL,执行数据库方言
- iOS App处于后台/被杀死的状态仍可进行语言播报的实现 (适配iOS12.1 ,iOS15的本地通知功能)
- matlab死亡时间推测实验,尸检——关于死亡时间推测的基本手法及操作方式