You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间间隔合并连续时段:SQL真实起止时间分组查询

需求:编写SQL查询合并连续无间隔的时段

实现目标:基于时间间隔对start_time和end_time分组,识别无间隔衔接的连续时段,为每条原始记录匹配对应连续时段的real_start(时段起始)和real_end(时段结束);最终得到去重后的分组结果,仅保留不同时段的真实起止时间。


输入数据

IDstart_timeend_time
108:00:0008:05:00
108:05:0009:55:00
109:55:0010:15:00
110:15:0011:03:00
111:03:0012:01:00
113:02:0013:44:00
114:44:0014:55:00
114:55:0015:03:00
115:03:0017:00:00

预期中间输出

IDstart_timeend_timereal_startreal_end
108:00:0008:05:0008:00:0012:01:00
108:05:0009:55:0008:00:0012:01:00
109:55:0010:15:0008:00:0012:01:00
110:15:0011:03:0008:00:0012:01:00
111:03:0012:01:0008:00:0012:01:00
113:02:0013:44:0013:02:0013:44:00
114:44:0014:55:0014:44:0017:00:00
114:55:0015:03:0014:44:0017:00:00
115:03:0017:00:0014:44:0017:00:00

预期最终输出

IDreal_startreal_end
108:00:0012:01:00
113:02:0013:44:00
114:44:0017:00:00

SQL实现方案

核心思路

利用窗口函数标记连续时段的分组,再通过分组聚合计算每个连续时段的真实起止时间,最后按需输出中间或最终结果。

完整SQL代码

WITH grouped_data AS (
    SELECT 
        ID,
        start_time,
        end_time,
        -- 当当前记录的start_time与上一条的end_time不衔接时,生成新分组标识
        SUM(CASE WHEN start_time != LAG(end_time) OVER (PARTITION BY ID ORDER BY start_time) THEN 1 ELSE 0 END) 
            OVER (PARTITION BY ID ORDER BY start_time) AS group_id
    FROM your_table_name  -- 替换为实际表名
),
interval_summary AS (
    SELECT
        ID,
        group_id,
        MIN(start_time) AS real_start,
        MAX(end_time) AS real_end
    FROM grouped_data
    GROUP BY ID, group_id
)
-- 选择输出类型:
-- 1. 若要获取中间输出,注释下面的SELECT,启用下方的JOIN查询
-- SELECT 
--     gd.ID,
--     gd.start_time,
--     gd.end_time,
--     isum.real_start,
--     isum.real_end
-- FROM grouped_data gd
-- JOIN interval_summary isum ON gd.ID = isum.ID AND gd.group_id = isum.group_id
-- ORDER BY gd.ID, gd.start_time;

-- 2. 若要获取最终去重结果,执行以下SELECT
SELECT ID, real_start, real_end
FROM interval_summary
ORDER BY ID, real_start;

内容的提问来源于stack exchange,提问作者JEYA PRAKASH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:05:01