如何使用 SQL 查找持续时间重叠的事件?

问题描述 投票:0回答:1

我有下表

田野 类型 钥匙
事件ID int(11) PRI
持续时间 int(11)
事件ParentId int(11) 乘法
事件日期时间 日期时间 PRI
已创建 日期时间
est_日期时间 日期时间 乘法
pacific_ts int(11) 乘法
eastern_ts int(11) 乘法
更新了 日期时间

编辑:我需要找到任何有重叠的列的所有唯一

EventParentId
eastern_ts
pacific_ts
是开始时间,每个事件还有一个以秒为单位的
duration
。我对 SQL 比较陌生,不确定这需要如何完成。使用 Java 获取所有列并进行过滤会更容易还是仅使用 SQL 就可以实现?

事件ID 持续时间 事件ParentId 事件日期时间 pacific_ts eastern_ts
1234 30 56789 2023-03-01T10:00:00 1677693600 1677704400
1235 45 98765 2023-03-01T10:01:00 167769366
1236 45 98765 2023-03-01T10:01:15 1677693675
4567 60 34567 2023-03-03T09:45:20 1677865520
4568 45 34567 2023-03-03T09:45:40 1677865540
2345 60 65432 2023-03-03T09:45:40 1677854740 1677865540

因为

1235
1236
共享
EventParentId
并且有重叠的持续时间,我预计
EventParentId
98765。我也预计
EventParentId
34567
因为
4567
4568
有重叠的持续时间,但会不期望
65432
因为它不会与同一个
EventParentId

内的任何内容重叠

编辑:预期结果

事件ID 持续时间 事件ParentId 事件日期时间 pacific_ts eastern_ts
1235 45 98765 2023-03-01T10:01:00 167769366
4567 60 34567 2023-03-03T09:45:20 1677865520
sql mysql-5.7
1个回答
0
投票
SELECT
  *
FROM
  your_table  AS a
WHERE
  EXISTS (
    SELECT *
      FROM your_table   AS b
     WHERE b.EventParentId  = a.EventParentId
       AND b.EventDateTime >= a.EventDateTime
       AND b.EventDateTime <  a.EventDateTime + INTERVAL a.Duration SECOND
  ) 
© www.soinside.com 2019 - 2024. All rights reserved.