确定重叠 DATETIME 范围的最大数量

2023-12-13

我有一张桌子,上面有一些DATETIME范围,比如

id | start               | end
----------------------------------------------
1  | 2011-12-18 16:00:00 | 2011-12-18 17:00:00
2  | 2011-12-19 08:00:00 | 2011-12-19 10:00:00
3  | 2011-12-19 11:00:00 | 2011-12-19 13:00:00
4  | 2011-12-19 12:00:00 | 2011-12-19 14:00:00
5  | 2011-12-19 13:00:00 | 2011-12-19 15:00:00
6  | 2011-12-19 13:00:00 | 2011-12-19 14:00:00
7  | 2011-12-20 13:00:00 | 2011-12-20 14:00:00

因此,2011 年 12 月 19 日的范围如下:

8    9   10   11   12   13   14   15
<-------->
               <-------->
                    <-------->
                         <-------->
                         <---->

目标是,在插入新记录时,找到已存在的重叠范围的最大数量:即:在插入新范围时2011-12-19 12:00:00 - 2011-12-19 15:00:00我想收到3,因为重叠范围的最大数量为 3,从 13:00 到 14:00。

从现在起我设法拥有了这个

select
    count(*) as cnt
from
    mytable as p
where
    ( # check if new renge overlap existings ones
        (@start >= start and @start < end)
        or
        (@end > start and @end <= end)
    )
    or
    ( # check if existing range is included by new one
        start between @start and @end
        and
        end between @start and @end
    )

但这次回归4因为它检测到除第一个范围之外的所有范围,但这是错误的。

我已经找到了

  • 确定两个日期范围是否重叠
  • 如何在 SQL 中选择重叠的日期范围
  • 检查表的时间重叠?

但所有这些问题都略有不同。

我使用的是 Mysql 5.7,但如果需要的话可以升级到 8。


这个答案适用于包含窗口函数的 MySQL 8.0。该解决方案的核心是以下查询,该查询为数据中每个感兴趣的区间查找多个重叠区间:

select t2.startDt, t2.endDt, count(*) overlaps_count
from
(
    select lag(t1.dt) over (order by t1.dt) startDt, t1.dt endDt
    from
    (
        select startt dt from data
        union
        select endt dt from data
    ) t1
) t2
join data on t2.startDt < data.endt and t2.endDt > data.startt
group by t2.startDt, t2.endDt

数据库小提琴演示

一旦获得此结果(我们称之为重叠表),您就可以轻松找到输入间隔的最大值,如下所示

with Overlap as
(
   -- the query above
)
select max(overlaps_count)
from Overlap 
where @start < endDt and @end > startDt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定重叠 DATETIME 范围的最大数量 的相关文章

  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • SQL Server 中的 FIFO 查询

    我正在构建一个库存管理应用程序c with SQL server 我想做一个FIFO从我的表查询 我以可变价格购买了相同的产品 之后我卖掉了其中一些 我想根据 先进先出 进行查询BatchDate柱子 所以我想通过PurchasePrice
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 具有不同组合的产品和产品包的数据库模型

    您将如何设计数据库来实现此功能 考虑一个场景 我们想要创建一个产品关系 封装 假设我们创建一个产品表 prod id prod name prod fee 1 prepaid A 19 usd 2 prepaid B 29 usd 3 pr
  • 无法连接到 MAMP 上的 phpMyAdmin

    我收到此错误消息 MySQL 说道 无法连接 设置无效 phpMyAdmin 尝试连接 MySQL 服务器 但服务器拒绝连接 您应该检查配置中的主机 用户名和密码 并确保它们与 MySQL 服务器管理员提供的信息相对应 用户和通行证是默认的
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 需要在 SQL Server 中透视字符串值

    我有一个包含值的表 描述为 Occupation String Name String Developer A Developer B Designer X Coder Y Coder Z 我需要数据透视格式的值 Designer Deve
  • 消息 203,级别 16,状态 2,不是有效标识符

    我收到以下错误 消息 203 级别 16 状态 2 过程 getQuestion 第 18 行名称 select top 1 from tlb Question inner join tlb options on tlb options q
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 条件触发器的Django迁移sql

    我想创建一个触发器 仅在满足条件时插入表 我尝试过使用 IF BEGIN END 和 WHERE 的各种组合 但 Django 每次都会返回 SQL 语法错误 这里 type user id指的是触发该事件的人 user id指的是接收到通
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • CONTAINS 不适用于 Oracle Text

    我在执行此查询时遇到问题 SELECT FROM gob attachment WHERE CONTAINS gob a document java gt 0 它给了我 ORA 29902 error in executing ODCIIn
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 从数据库检索数据并设置为 Kivy 中的文本输入字段和图像小部件,以实现多屏应用程序!属性错误

    我正在通过拼凑一个小应用程序来了解不同小部件的行为来学习 kivy 什么有效 该应用程序接受文本和图像作为输入并存储到数据库中 存储的数据使用 RecycleView 正确显示在按钮上 Problem 按下 RecycleView 上的按钮
  • Google 日历 API 日期时间

    我正在尝试让 Google Calendar Api 正常工作 如果不使用我的 POST 日期时间 它就可以完美工作 但日期是像谷歌那样硬编码的 这不是我想要的 当我使用 POST 变量时 它向我显示以下错误 Fatal error Unc
  • 如何在没有QProxyStyle的情况下修改样式提示?

    我使用 Qt 的 Python 绑定 PySide 或 PyQt4 他们没有QProxyStyle 我想更改样式提示的值 例如改变SH Menu SubMenuPopupDelay子菜单弹出延迟时间 在本机 C Qt 中我会使用QProxy
  • Python - 斐波那契函数变量值声明之间的差异

    我是 python 的初学者 我正在研究一种制作斐波那契函数的类型 def fib n a 0 b 1 while a
  • AdMob 广告单元 ID 需要多长时间才能生效?

    大约 4 小时前 我创建了一个新的广告单元 ID 并开始在未发布的 Android 应用程序的发布版本中使用它 但我得到的只是一个空白视图和以下 logcat 输出 W Ads Received error HTTP response co
  • 使用 getElementsByClassName 操作样式[重复]

    这个问题在这里已经有答案了 我不明白为什么我无法在代码中操纵 special 的样式 我确信这很简单 但它不起作用 h1 I am an h1 h1 p class special Hello p p class special Goodb
  • ADF 从代码手动调用操作

    我想从按钮 ActionListener 执行数据控制操作 CreateInsert 和 Delete 我知道可以从 数据控件 菜单插入数据控制按钮 但由于各种原因我需要这样做 其中一个突出的原因是我需要执行额外的运行时检查 我找到了以下代
  • Python 随机无重复

    这是我的代码 我试图用 0 6 之间的 7 个数字填充一个列表 没有重复 并且每次都是随机顺序 这是我的代码 但我不断收到错误 列表分配索引超出范围 但我不知道我的错误在哪里 这是我的代码 import random def generat
  • 高级 C 问题:请解释 C 构造 *({ foo(&bar); &bar; })

    这最终是在研究Linux内核源代码的completion h中的代码时出现的一个C问题 在那里我看到了我以前从未在C中使用过的C技术 虽然对它在做什么有一个模糊的感觉 但我想用精确的描述来调整我的理解 而且我不太确定如何在没有可能漫长的考验
  • 使用 PHP 时,我可以使用 JDBC 或 ODBC 连接吗?

    我有一个 PHP 应用程序 我想从 MySQL 切换到 Cache DB 我想知道是否可以使用 JDBC 或 ODBC 连接 因为 Cache 不附带 PHP 连接 Thanks PHP 可以使用 ODBC 连接directly或通过PDO
  • JPA 枚举的映射集合

    JPA 有没有办法在实体类中映射枚举集合 或者唯一的解决方案是将 Enum 与另一个域类包装并使用它来映射集合 Entity public class Person public enum InterestsEnum Books Sport
  • 斐波那契数列的负输出

    尽管使用了斐波那契数列 但在添加大量数字时 我得到了负输出long int 如何解决这个问题 include
  • Hibernate - 复合主键包含外键

    我有一个类似的问题如下 但解决方案并没有解决我的问题 hibernate复合主键包含复合外键 如何映射这个 我正在尝试连接两个表 每个表都有一个带有部分外键引用的复合主键 Table A f1 pk f2 pk f3 pk f4 pk Ta
  • 如何阻止特定应用程序访问我的网站

    有人有一个应用程序 Android 可以访问我的网站并显示一些页面 我本来可以接受它 除非该应用程序有一些错误 并且使用它的人无法使用该网站的某些功能 我怎样才能阻止这个特定的应用程序 附 我拥有对我的网络服务器的根访问权限 并且它是专用的
  • LD_LIBRARY_PATH

    我可以为单个应用程序设置 LD LIBRARY PATH 吗 我正在调查系统调用失败 那么有什么方法可以使用 LD LIBRARY PATH 设置设置正确的路径 最简单的方法是创建一个 shell 脚本 让 shell 脚本导出新的 LD
  • 使用 dompdf 生成 pdf 图像时出错

    我必须在生成的 PDF 的每一页中显示徽标 虽然它在本地系统中工作正常 但在服务器中抛出以下异常 Fatal error Uncaught exception PDFlibException with message Handle para
  • 如何在 JScrollPane 中获取 JScrollPanes 以跟随父级的大小调整

    所以我有一堆JTables Each JTable是在一个里面JScrollPane 然后我将添加其中的每一个JScrollPanes to a JPanel 然后我添加这个JPanel to a JScrollPane然后到另一个JPan
  • 为什么我无法用 Prolog 得到 Ship Puzzle 的答案?

    我需要使用 Prolog 解决 Ship Puzzle 问题 以下是事实 有5艘船 希腊的船六点出发 载着咖啡 中间的船有一个黑色的烟囱 英国船九点出发 有蓝色烟囱的法国船位于一艘运载咖啡的船的左侧 运载可可的船的右侧是一艘开往马赛的船 这
  • 检测序列的排列

    我有一个像这样的数字列表 数组 1 2 3 4 所以我的目标是检查给定的另一个数组 如果该数组是原始示例的排列 则该数组 3 4 1 2 and 1 2 4 3 是原始的排列 但是 1 2 1 1 or 1 5 4 3 not 两种可能的解
  • 确定重叠 DATETIME 范围的最大数量

    我有一张桌子 上面有一些DATETIME范围 比如 id start end 1 2011 12 18 16 00 00 2011 12 18 17 00 00 2 2011 12 19 08 00 00 2011 12 19 10 00