如何按间隔4小时对记录进行分组?
例如,我有一些行包含有关事件持续时间的数据。
事件_id | 开始日期 | 结束日期 |
---|---|---|
1 | 2024-08-16 14:30:00 | 2024-08-16 16:00:00 |
1 | 2024-08-16 16:00:00 | 2024-08-16 17:30:00 |
1 | 2024-08-16 17:30:00 | 2024-08-16 19:00:00 |
1 | 2024-08-16 19:00:00 | 2024-08-16 20:30:00 |
1 | 2024-08-16 20:30:00 | 2024-08-16 22:00:00 |
1 | 2024-08-16 22:00:00 | 2024-08-16 23:30:00 |
我想对它们进行分组,但 1 行的最大持续时间应该是 4 小时。
结果:
事件_id | 开始日期 | 结束日期 |
---|---|---|
1 | 2024-08-16 14:30:00 | 2024-08-16 17:30:00 |
1 | 2024-08-16 17:30:00 | 2024-08-16 20:30:00 |
1 | 2024-08-16 20:30:00 | 2024-08-16 23:30:00 |
我尝试使用类似的东西来显示增加的持续时间,但不知道如何使用它进行分组
select sum(end_date - start_date) over (partition by event_id order by start_date)
MIN(start_date) OVER (PARTITION BY event_id)
找到每个 start_date
的最早的 event_id
。FLOOR
根据 4 小时间隔分配组号。MIN(start_date)
和 MAX(end_date)
查找每组的开始和结束时间。WITH grouping AS (
SELECT
event_id,
start_date,
end_date,
MIN(start_date) OVER (PARTITION BY event_id) AS first_start_date,
FLOOR(
TIMESTAMPDIFF('second', MIN(start_date) OVER (PARTITION BY event_id), start_date)
/ (4 * 3600)
) AS group_num
FROM event
)
SELECT
event_id,
MIN(start_date) AS start_date,
MAX(end_date) AS end_date
FROM grouping
GROUP BY event_id, group_num
ORDER BY event_id, start_date;