SQL强化:将相同的或连续的时间段合并

2023-05-16

问题描述:有一张签到表,需要将连续或相同的时间段合并,即把多条记录查询合并成一条连续的时间段记录。

数据表如下:

DROP TABLE IF EXISTS `timesheets`;
CREATE TABLE `timesheets` (
  `task_id` varchar(10) NOT NULL DEFAULT '',
  `start_date` date DEFAULT NULL,
  `end_date` date DEFAULT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of timesheets
-- ----------------------------
INSERT INTO `timesheets` VALUES ('1', '2014-03-01', '2014-03-03');
INSERT INTO `timesheets` VALUES ('10', '2014-03-17', '2014-03-17');
INSERT INTO `timesheets` VALUES ('2', '2014-03-02', '2014-03-04');
INSERT INTO `timesheets` VALUES ('3', '2014-03-04', '2014-03-05');
INSERT INTO `timesheets` VALUES ('4', '2014-03-06', '2014-03-09');
INSERT INTO `timesheets` VALUES ('5', '2014-03-09', '2014-03-09');
INSERT INTO `timesheets` VALUES ('6', '2014-03-09', '2014-03-09');
INSERT INTO `timesheets` VALUES ('7', '2014-03-12', '2014-03-15');
INSERT INTO `timesheets` VALUES ('8', '2014-03-13', '2014-03-14');
INSERT INTO `timesheets` VALUES ('9', '2014-03-14', '2014-03-14');

解答:
解法一:

首先需要明确,查询的结果肯定是通过表自身的连接得到的,因为查询的两个字段来自不同的记录行,不妨分组得到可能的记录再筛选:

SELECT a.start_date,b.end_date FROM timesheets a,timesheets b ,timesheets c 
WHERE a.end_date<=b.end_date GROUP BY a.start_date,b.end_date;

哪些记录需要排除呢,结果字段在原表同一条记录的两值之间的记录都得干掉,起点和起点可相同,终点和终点可相同:

SELECT a.start_date,b.end_date FROM timesheets a,timesheets b ,timesheets c 
WHERE a.end_date<=b.end_date GROUP BY a.start_date,b.end_date 
HAVING MAX(CASE WHEN (a.start_date>c.start_date and a.start_date<=c.end_date) OR (b.end_date>=c.start_date and b.end_date<c.end_date) then 1 ELSE 0 END) =0 ;

最后,从这个结果集中分组得到最终的结果,起始时间和组内最小的终止时间:

SELECT d.start_date,MIN(d.end_date) from (SELECT a.start_date,b.end_date FROM timesheets a,timesheets b ,timesheets c 
WHERE a.end_date<=b.end_date GROUP BY a.start_date,b.end_date 
HAVING MAX(CASE WHEN (a.start_date>c.start_date and a.start_date<=c.end_date) OR (b.end_date>=c.start_date and b.end_date<c.end_date) then 1 ELSE 0 END) =0) d 
GROUP BY d.start_date;

解法二:

通过左连接分别得到起始时间和终止时间,然后通过内连接合并结果:

#干掉起点时间在某记录起止时间之间的
SELECT  a.start_date 
FROM timesheets a LEFT OUTER JOIN timesheets b 
ON a.start_date>b.start_date AND a.start_date<=b.end_date GROUP BY a.start_date HAVING COUNT(b.start_date)=0;

#干掉终点时间在某记录起止时间之间的
SELECT a.end_date 
FROM timesheets a LEFT OUTER JOIN timesheets b 
ON a.end_date>=b.start_date AND a.end_date<b.end_date GROUP BY a.end_date HAVING COUNT(b.start_date)=0;

SELECT x.start_date,MIN(y.end_date)  FROM 
(SELECT  a.start_date 
FROM timesheets a LEFT OUTER JOIN timesheets b 
ON a.start_date>b.start_date AND a.start_date<=b.end_date GROUP BY a.start_date HAVING COUNT(b.start_date)=0) x 
INNER JOIN 
(SELECT a.end_date 
FROM timesheets a LEFT OUTER JOIN timesheets b 
ON a.end_date>=b.start_date AND a.end_date<b.end_date GROUP BY a.end_date HAVING COUNT(b.start_date)=0) y 
ON x.start_date<=y.end_date GROUP BY x.start_date;
结果如图:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL强化:将相同的或连续的时间段合并 的相关文章

  • docker打包流程常用方式

    完整的docker打包流程 把外网服务器上的docker搬到内网使用时 xff0c 报了两个错误 xff0c 外网容器到tar包都没问题 xff0c 在内网使用tar包的时候报了两个错误 cannot connect to the Dock
  • 5GC 网元AMF、SMF、UPF、PCF、UDM等介绍

    5GC 网元AMF SMF AUSF UPF PCF UDM NRF NSSF NEF介绍 1 AMF Access and Mobility Management Function xff0c 接入和移动性管理功能 xff0c 执行注册
  • 如何准备校招?

    秋招已经落尽尾声 xff0c 今天小牛想把自己的学习经验分享给大家 xff0c 避免大家多走弯路 1 首先需要确定自己想从事哪方面的工作 比如服务端开发 xff08 Java开发工程师 xff0c C 43 43 开发工程师 xff09 x
  • 5GC architecture N1、N2、N3、N4、N6等接口

    5GC architecture N1 N2 N3 N4 N6 N9 N26接口 N1接口 N1接口为UE和AMF间的信令面接口 N1是逻辑概念的接口 xff0c 不存在物理口 N1接口基于N2接口信令实现 N2接口 N2接口为 R AN和
  • FAQ:报红--maven本地有jar包仍从从远端下载

    问题 xff1a 最近编译项目 xff0c 发现有个模块依赖总是编译不过 xff0c 报无法download jar包 但是查看maven配置的远端仓库 xff0c 发现maven已不支持该jar包 但是本地确实存在 xff0c idea
  • SNMP(简单网络管理协议)详解

    一 简介 SNMP 简单网络管理协议 xff1a 专门用于在 IP 网络管理网络节点 xff08 服务器 工作站 路由器 交换机及HUBS等 xff09 的一种标准协议 xff0c 它是一种应用层协议 SNMP 使网络管理员能够管理网络效能
  • XXL-JOB分布式任务调度平台

    XXL JOB 是一个轻量级分布式任务调度平台 xff0c 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 现已开放源代码并接入多家公司线上产品线 xff0c 开箱即用 Gitee 地址下载 xff1a https gitee com
  • 2万字详解,吃透 ES

    之前已经分享过Elasticsearch的使用和原理的知识 xff0c 由于近期在公司内部做了一次分享 xff0c 所以本篇主要是基于之前的博文的一个总结 xff0c 希望通过这篇文章能让读者大致了解Elasticsearch是做什么的以及
  • 手动回收Linux内存

    linux的内存分配是采用大页面的方式 xff0c 有可能会出现内存回收不及时导致系统卡住的情况 xff0c 这时候可以手工回收一下内存 执行 xff1a echo 1 gt proc sys vm drop caches 查看系统资源使用
  • spring-expression表达式详解

    一 概述 Spring Expression Language xff08 简称 SpEL xff09 是一个支持查询和操作运行时对象的强大的表达式 语言 贯穿着整个 Spring 产品组的语言 SpEL是单独模块 xff0c 只依赖于co
  • Docker容器整合wagon-ssh自动化部署SpringBoot工程

    一 前提条件 xff1a 机器上已经安装了docker 安装过程 准备部署的springboot的jar包Dockerfile文件部署脚本deploy sh升级脚本upgrade sh 二 准备Dockerfile 文件 创建一个Docke
  • TIME_WAIT和CLOSE_WAIT状态区别

    在服务器的日常维护过程中 xff0c 会经常用到下面的命令 xff1a netstat n awk 39 tcp 43 43 S NF END for a in S print a S a 39 它会显示例如下面的信息 xff1a TIME
  • 迭代过程:batch和epochs

    目录 引入 使用mini batch的优点 xff1a xff08 对比传统的梯度下降 更容易找到全局最优解 缺点 xff1a 要定义的两个超参数 xff1a batch size epochs 引入数据 TensorDataset Dat
  • PlantUML 语法之时序图

    文章目录 前言 96 gt gt 96 信息传递声明参与者的几个关键字 96 as 96 重命名参与者 96 96 添加颜色 96 order 96 定义参与者顺序 96 96 参与者名字给自己发信息修改传达信息的箭头样式修改箭头颜色 96
  • 基于ArUco的视觉定位(一)

    一 ArUco简介及安装步骤 ArUco a minimal library for Augmented Reality applications based on OpenCV xff0c 是科尔多瓦大学 人工视觉应用 研究小组 xff0
  • 基于ArUco的视觉定位(三)

    一 ArUco之Marker Mapper 1 Marker Mapper简介 Mapping and Localization from Planar Markers是A V A小组基于ArUco开发的一个利用二维码建图与定位的项目 论文
  • 关于《基于ArUco的视觉定位》系列博文撤回的通知

    由于近期我们要申请发明专利 xff0c 博客中涉及较多私密内容 xff0c 所以暂时不能公开了 我把之前的网页保存了图片格式 xff0c 有想继续学习的同学可以在本博客下方评论区留下你们的邮箱 xff0c 我会把相关内容私发给你们 收到邮件
  • c++继承详解之一——继承的三种方式、派生类的对象模型

    C 43 43 是OOP xff08 Object Oriented Programming xff09 语言 xff0c 即面向对象编程语言 OOP的核心思想就是数据抽象 xff08 类的设计 xff09 xff0c 继承和动态绑定 类展
  • ZED2跑ORB-SLAM3+双目相机、IMU联合标定+显卡驱动与cuda/cudnn安装

    一 引言 同样是项目需求 xff0c 需要利用视觉惯性导航做一些开发 xff0c 所以第一步先做些算法的测试 仿真与实物测验 xff0c 通过仿真的测试结果 xff0c 最终是决定使用ORB SLAM3来完成任务 xff0c 当然了 xff
  • FreeRTOS学习笔记——任务删除 vTaskDelete() API

    任务可以使用API函数 vTaskDelete 删除自己或其他任务 空闲任务的责任是要将分配给已删除任务的内存释放掉 注意 xff1a 只有内核为任务分配的内存空间才会在任务被删除后自动回收 xff0c 任务自己占用的内存或资源需要由应用程

随机推荐

  • mac 安装jd-gui

    https blog csdn net daicaho article details 81141251 使用brew安装 xff0c 打开终端窗口 xff0c 输入下面命令 brew cask install jd gui 如果提示 br
  • 统计降尺度与动力学降尺度

    1 统计降尺度 xff1a 1 1 概念解释 xff1a 统计降尺度 也称为经验降尺度 xff0c 是由大尺度气候信息获取小尺度气候信息的有力工具 他可被视作是与动力降尺度平行的降尺度方法 xff0c 或者可被看做是动力降尺度的补充 1 2
  • 无人驾驶技术之激光雷达市场分析

    无人驾驶技术之激光雷达市场分析 LiDAR Light Detection And Ranging xff0c 即激光雷达 xff0c 是利用激光 全球定位系统GPS和惯性测量装置 xff08 IMU xff09 三者合一 xff0c 获得
  • 线性系统理论——状态观测器状态反馈

    在学习现代控制理论的时候 xff0c 想必大家都学过状态观测器这个东西 状态观测器的作用就是在实际控制系统某些地方不方便或者不能加传感器的时候 xff0c 对系统的各部分状态做一个估计 xff0c 这个估计一般是通过系统输出推导后得到的 为
  • 【wzdftpd安装】wzdftpd的linux版本安装教程

    近期要开展漏洞挖掘的工作 xff0c 因此需要安装wzdftpd在机器上 xff0c 又因为这个东西比较老 xff0c 自己各种摸索之下终于搞定它的安装流程了 xff0c 现在记录一下 一 下载地址 https sourceforge ne
  • 树莓派——镜像篇

    因为某些原因 xff0c 我又得重新配置树莓派环境了 xff0c 官网链接在这里 xff1a 点击 顺便一提 xff0c 有三个版本 xff0c 选择 Raspbian Buster with desktop xff0c 这个是带有桌面的
  • 树莓派——网络连接篇

    树莓派一连上电源就会开始亮灯 xff0c 通常有两盏灯 xff0c 一盏是红色的 xff0c 一盏是绿色的 xff0c 详见灯的意义在这篇博文里面有 点击 我认识的树莓派显示方式以及网络连接方式各有两种 xff1a 界面显示方式 xff1a
  • 19年电赛经验总结

    1 今年带了两个学弟 xff0c 结果他两因为从来没有这样子熬夜过导致晚上脑子转不动 xff0c 相当于晚上就不能熬夜的状态 总结 xff1a 还是要做好准备 xff0c 你平时没有晚上干活干到这个点可能还是不能想象当时的状态的 2 电赛清
  • 树莓派——opencv篇

    1 查看python3的版本 如果是python3 5的 xff0c 请使用这个教程 xff1b 如果是python3 7的 xff0c 请使用这个教程 2 错误集合 遇到了以下的情况 xff0c 请参考https blog csdn ne
  • 毕业季——找工作必备APP

    整理了一些在我找工作的时候对我帮助挺大的APP 1 前程无忧51Job xff1a 我通常在这里面看附近大学的宣讲会安排 xff0c 蛮方便的 xff0c 比我在一个一个学校官网看信息好多了 2 BOSS直聘 拉钩招聘 xff1a 在里面看
  • 运行虚拟机卡在booting the kernel

    最近在学宋宝华的 linux设备驱动开发详解 在配置环境的时候 xff0c 按照给的工具包安装了 VMware player 7 0 0 2305329 1420626349 exe 然后就按照流程一步一步的照做 xff0c 到了最后一步运
  • eclipse与华为云之间push代码的相关问题汇总

    1 直接反馈连接超时 Transport Error Cannot get remote repository refs http codehub devcloud cn north 4 huaweicloud com ssm shoppi
  • 饿

    以为有片海苔在我桌子上 xff0c 正眼一看 xff0c 原来是一片charger ic
  • 【小记】个人面试总结

    时间 xff1a 2023 5 10晚线上 岗位 xff1a Linux软件工程师 公司名字 xff08 直接写出来会不会不太好哇 xff09 深圳光明某初创公司 这是近两个月面试的第一家公司 xff0c 我是对这个公司名字 xxx新能源以
  • Ubuntu操作系统配置阿里云镜像方法一

    Ubuntu xff0c 是一款基于 Debian Linux 的以桌面应用为主的操作系统 xff0c 内容涵盖文字处理 电子邮件 软件开发工具和 Web 服务等 xff0c 可供用户免费下载 使用和分享 阿里云官方镜像站 xff1a ht
  • 关于在Ardusub-Raspberry镜像中ssh密码错误access denied问题

    环境 xff1a Win10 在此感谢论坛大佬的回答 xff0c 一下附上原网址 http rovmaker cn t topic 1272 在ArduSub入门教程 树莓派设置中 xff0c 本人按照上面的教程 xff0c 当完成相应步骤
  • O2OA中如何使用PostgreSQL + Citus 实现分布式数据库实现方案?

    虽然 O2OA 数据表高效的表结构以及索引的设计已经极大程度地保障了数据存取操作的性能 xff0c 但是随着使用时间从增长 xff0c 数据表存放的数据量也会急剧增长 此时 xff0c 仍然需要有合适的方案来解决数据量产生的系统性能瓶颈 本
  • 我的2013——学习、工作与生活

    一直觉得应该写阶段性总结 xff0c 以知道自己这段时间在干什么 xff0c 下一个阶段该干什么 xff0c 没实施过 xff1b 一直觉得学技术就应该多些博客 xff0c 以和同行共同学习交流 xff0c 分享是美德 xff0c 也是对
  • POI Excel导出样式设置

    HSSFSheet sheet 61 workbook createSheet 34 sheetName 34 创建sheet sheet setVerticallyCenter true 下面样式可作为导出左右分栏的表格模板 sheet
  • SQL强化:将相同的或连续的时间段合并

    问题描述 xff1a 有一张签到表 xff0c 需要将连续或相同的时间段合并 xff0c 即把多条记录查询合并成一条连续的时间段记录 数据表如下 xff1a DROP TABLE IF EXISTS 96 timesheets 96 CRE