sql 时间交集

任务(取时间交集)

前端输入开始时间和结束时间,通过sql筛选出活动开始时间和活动结束时间再开时时间和结束时间有交集的活动

想法:

前后一段时间内遇到了类似取交集的,从网上找到了两种写法,再结合GPT等工具比对了,记录该文章,若有错误请指正。

代码

-- 原始查询
SELECT *
FROM activities
WHERE (activity_start_time <= :input_end_time AND activity_end_time >= :input_start_time)OR(activity_start_time >= :input_start_time AND activity_start_time <= :input_end_time)OR(activity_end_time >= :input_start_time AND activity_end_time <= :input_end_time)-- 简化查询
SELECT *
FROM activities
WHERE activity_start_time <= :end_inputAND activity_end_time >= :start_input;

● 原始查询: 这个查询语句比较复杂,它通过三个条件的组合来筛选数据。这三个条件分别表示:
○ 活动的开始时间在输入的结束时间之前,并且活动的结束时间在输入的开始时间之后。
○ 活动的开始时间在输入的开始时间之后,并且活动的开始时间在输入的结束时间之前。
○ 活动的结束时间在输入的开始时间之后,并且活动的结束时间在输入的结束时间之前。
● 简化查询: 这个查询语句相对简单,它只用两个条件来筛选数据。这两个条件表示:
○ 活动的开始时间在输入的结束时间之前。
○ 活动的结束时间在输入的开始时间之后。

结论

经过分析,这两个查询语句是等价的。简化后的查询语句通过更简洁的条件表达了与原始查询相同的含义。

其他证明材料

-- 创建测试表
CREATE TABLE IF NOT EXISTS activities (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255),activity_start_time DATETIME,activity_end_time DATETIME
);-- 清空表
TRUNCATE TABLE activities;-- 插入测试数据
INSERT INTO activities (name, activity_start_time, activity_end_time) VALUES('Activity 1', '2023-01-01 10:00:00', '2023-01-01 12:00:00'),('Activity 2', '2023-01-01 11:00:00', '2023-01-01 13:00:00'),('Activity 3', '2023-01-01 13:00:00', '2023-01-01 15:00:00'),('Activity 4', '2023-01-01 09:00:00', '2023-01-01 11:30:00'),('Activity 5', '2023-01-01 14:00:00', '2023-01-01 16:00:00');-- 定义测试案例
SET @test_cases = '
(''2023-01-01 10:30:00'', ''2023-01-01 14:30:00''),
(''2023-01-01 09:00:00'', ''2023-01-01 11:00:00''),
(''2023-01-01 12:00:00'', ''2023-01-01 13:00:00''),
(''2023-01-01 08:00:00'', ''2023-01-01 17:00:00''),
(''2023-01-01 15:30:00'', ''2023-01-01 16:30:00'')
';-- 创建临时表来存储测试案例
CREATE TEMPORARY TABLE test_cases (start_time DATETIME,end_time DATETIME
);-- 将测试案例插入临时表
SET @sql = CONCAT('INSERT INTO test_cases (start_time, end_time) VALUES ', @test_cases);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;-- 执行测试并显示结果
SELECT tc.start_time,tc.end_time,CASE WHEN (SELECT COUNT(*) FROM activities WHERE (activity_start_time <= tc.end_time AND activity_end_time >= tc.start_time)OR (activity_start_time >= tc.start_time AND activity_start_time <= tc.end_time)OR (activity_end_time >= tc.start_time AND activity_end_time <= tc.end_time)) = (SELECT COUNT(*) FROM activities WHERE activity_start_time <= tc.end_timeAND activity_end_time >= tc.start_time)THEN '等价'ELSE '不等价'END AS 结果
FROM test_cases tc;-- 清理
DROP TEMPORARY TABLE test_cases;

这个脚本做了以下几件事:

  1. 创建并填充了 activities 表,包含了多个活动的开始和结束时间。
  2. 定义了多个测试案例,覆盖了不同的时间范围。
  3. 创建了一个临时表来存储这些测试案例。
  4. 对每个测试案例,执行两个查询并比较它们的结果。
  5. 显示每个测试案例的结果,指明两个查询是否等价。
    测试案例包括:
  6. 跨越多个活动的时间范围
  7. 仅覆盖一个活动的开始部分
  8. 仅覆盖一个活动的结束部分
  9. 覆盖所有活动的时间范围
  10. 不覆盖任何活动的时间范围

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551429.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

选择国企eHR人事管理系统的时候,应该注意什么?

近年来&#xff0c;中国正步入高速发展的黄金时期&#xff0c;国有企业&#xff08;国企&#xff09;在追求效率和管理水平提升方面迈出了重要步伐。为了进一步实现数字化、流程化和科学化管理&#xff0c;越来越多的国企选择引进eHR&#xff08;电子人力资源管理&#xff09;系…

【Diffusion分割】MedSegDiff-v2:Diffusion模型进行医学图像分割

MedSegDiff-V2: Diffusion-Based Medical Image Segmentation with Transformer 摘要&#xff1a; 最近的研究揭示了 DPM 在医学图像分析领域的实用性&#xff0c;医学图像分割模型在各种任务中表现出的出色性能就证明了这一点。尽管这些模型最初是以 UNet 架构为基础的&…

opencv实战项目(三十):使用傅里叶变换进行图像边缘检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff0c;什么是傅立叶变换&#xff1f;二&#xff0c;图像处理中的傅立叶变换&#xff1a;三&#xff0c;傅里叶变换进行边缘检测&#xff1a; 一&#xff0c…

13个大V出文需要准确把握的重要因素

推文作为全球最大的社交平台之一&#xff0c;吸引了很多大V&#xff08;即具有巨大粉丝团的影响力和的账户&#xff09;的关注。那些大V常常运用推文发布相关各种各样热点的营销推广信息&#xff0c;以吸引更多人的关注参与。推文的发布时间段是V在宣传推广过程中需要准确把握的…

【真实访问】那些选择土木专业的学生,后来怎么样了?

“你会让孩子报土木专业吗&#xff1f;” 7月15日&#xff0c;澎湃新闻在微博上发起线上调研&#xff0c;截至16日12时&#xff0c;8000多人参与了投票&#xff0c;结果显示近7000人选择“不会&#xff0c;天坑专业”。短短几年时间&#xff0c;土木工程专业的报考从“香饽饽”…

CAN总线的错误类型

前言 CAN总线的错误类型主要包括&#xff1a;位错误、填充错误、格式错误、ACK错误和CRC错误。这里一定要做好CAN总线的错误类型、错误帧类型、节点状态之间的区别。 错误类型是帧传输出错的原因类型&#xff1b;错误帧类型&#xff08;主动错误帧、被动错误帧&#xff09;是帧…

基于IntraWeb的数据表格的多选实现

基于IntraWeb的数据表格的多选实现 既可以单条操作&#xff0c;也可以多选操作。 delphi源代码。 BS开发Web网站开发&#xff0c;不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者…

Zombie Slaughter 写实30个僵尸丧尸带动画角色模型

包含30个操纵的僵尸(15个男性和15个女性角色)+动画 所有僵尸都有分离的身体部位,以获得更好的射击/砍杀体验:) PBR材质包含4种纹理(基色、法线、粗糙度、AO),分辨率为4096x4096。 动画包括: -闲置 -步行 - 走回去 - 向右转 - 向左转 -担心 -尖叫 - 走路惹 -快跑 -阿格罗…

人工智能与伦理:如何确保AI应用中的隐私保护

引言 随着人工智能技术的飞速发展&#xff0c;AI已经渗透到我们生活的各个领域&#xff0c;从智能助手到个性化推荐系统&#xff0c;再到医疗诊断和金融服务&#xff0c;人工智能正在为我们带来前所未有的便利。然而&#xff0c;伴随着AI的广泛应用&#xff0c;隐私保护问题日益…

优选驾考系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;驾校管理&#xff0c;驾考文章管理&#xff0c;驾照类型管理&#xff0c;报名入口管理&#xff0c;学员报名管理&#xff0c;练车预约管理&#xff0c;考试场地管理 微信端账号功能包括&#xff1a;系统…

加油卡APP系统:省时、优惠、安心!

在汽车加油的刚需下&#xff0c;如何更加优惠的“加油”成为了大众关心的重点&#xff0c;而以优惠为主的加油卡系统也成为了大众的主要选择。 加油卡系统是汽车加油线上的服务系统&#xff0c;拥有全国各地的加油站权限&#xff0c;能够让车主在手机上进行充值&#xff0c;同…

VMware虚拟机连接公网,和WindTerm

一、项目名称 vmware虚拟机连接公网和windterm 二、项目背景 需求1&#xff1a;windows物理机&#xff0c;安装了vmware虚拟机&#xff0c;需要访问公网资源&#xff0c;比如云服务商的yum仓库&#xff0c;国内镜像加速站的容器镜像&#xff0c;http/https资源。 需求2&#xf…

【git】git分支之谜-十分钟给你讲透彻

这里写自定义目录标题 引子分支的直观模型在 git 中&#xff0c;分支是完整的提交记录分支用commit ID存储人们的直觉通常并没有那么错rebase 使用“直观”的分支概念merge也使用“直观”的分支概念github pull request 也使用直观的想法直觉很好&#xff0c;但它也有一些局限性…

前端编程艺术(1)---HTML

目录 1.HTML 2.注释 3.标题标签 4.段落标签 5.换行与水平分隔线 6.文本格式化标签 7.图像标签和属性 8.超链接 8.列表标签 9.表格标签 10.表单标签 11.HTML5 1.HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用于创建…

【JAVA开源】基于Vue和SpringBoot的新闻推荐系统

本文项目编号 T 056 &#xff0c;文末自助获取源码 \color{red}{T056&#xff0c;文末自助获取源码} T056&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Node-RED系列教程-23node-red获取OPCDAServer数据(DCOM配置)

准备了一个干净的windows 2016虚拟机: administrator wong@123 以管理员身份进入系统: 准备好如下软件: 使用的nodejs版本为: 设置淘宝镜像源: npm config set registry https://registry.npmmirror.com 安装nodered: npm install -g --unsafe-perm node-red@2.2.2

如何组织鼠标的默认的事件

如何组织鼠标的默认的事件 我原先的代码是 dblclick"checkNode(data)"设置了一个双击的事件&#xff0c;我如果双击的话就会导致这个内容被选中。 选中内容的同时会触发浏览器默认的操作&#xff0c;导致出现复制的框这些东西。 解决的方法。加一句。 mousedown.pr…

Power apps:一次提交多项申请

1、添加一个Form&#xff0c;导入sharepoint列表&#xff0c;添加确认&#xff0c;继续&#xff0c;取消按钮 2、在页面的onvisible属性中添加 Set(applynumber,Last(付款申请表).申请编号1); #定义一个申请编号变量&#xff0c;每次申请&#xff0c;就将列表最后一个…

2024上海网站建设公司哪家比较好TOP3

判断一家网建公司的好坏&#xff0c;第一是看公司背景&#xff0c;包括成立时间&#xff0c;工商注册信息等&#xff0c;第二可以去看看建站公司做的案例&#xff0c;例如&#xff0c;网站开发、设计、引流等等的以往案例&#xff0c;了解清楚具体的业务流程。 一、公司背景 …

让小脚本成为自己高效测试的工具

测试中会遇到的工具 软件测试如果仅仅靠手工去执行会发现在很多地方力不从心&#xff0c;虽然市面上已经有大牛开源了一些测试工具可以供我们使用但是在一些公司特有的业务方面则需要我们借助开源或重新做一个自己的测试工具。 测试常用的开源工具 死链接检测工具 Xenu home…