SQL VERTICA 按间隔分组

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

如何按间隔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)
sql vertica
1个回答
0
投票
  • 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;
© www.soinside.com 2019 - 2024. All rights reserved.