我有下表
田野 | 类型 | 空 | 钥匙 |
---|---|---|---|
事件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 |
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
)