如何用SQL计算进程运行时长并合并同类型连续记录
SQL 解决方案:合并连续相同Type的记录
要实现合并连续相同Type的重复记录、明确各时间段运行信息的需求,我们需要先补全空的Result字段(将其填充为同Type后续的有效时间段),再使用间隙与岛屿技术分组聚合:
- 对每条记录,填充同Type下最近的非空
Result值(向前补全) - 基于Type和补全后的Result生成分组ID,识别连续的同时间段同Type记录
- 对每个分组,取最早的
Start时间和对应的Result
以下是对应的SQL查询语句(假设表名为run_records):
WITH filled_result AS ( SELECT Type, Start, Result, -- 补全同Type下最近的非空Result值 LAST_VALUE(Result IGNORE NULLS) OVER ( PARTITION BY Type ORDER BY Start ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS filled_result FROM run_records ), grouped_records AS ( SELECT Type, Start, filled_result, -- 生成分组ID,区分不同时间段的同Type记录 ROW_NUMBER() OVER (ORDER BY Start) - ROW_NUMBER() OVER (PARTITION BY Type, filled_result ORDER BY Start) AS group_id FROM filled_result ) SELECT Type, MIN(Start) AS Start, filled_result AS Result FROM grouped_records GROUP BY Type, filled_result, group_id ORDER BY MIN(Start);
结果说明
执行该查询后,会得到与需求匹配的结果:
| Type | Start | Result |
|---|---|---|
| A | 2:02 | 2:00 - 2:30 |
| B | 2:30 | 2:30 - 2:46 |
| A | 2:46 | 2:46 - 3:00 |
| A | 3:00 | 3:00 - 4:00 |
| A | 4:00 | 4:00 - 5:00 |
如果需要按小时维度统计各Type的运行时长,可以进一步解析Result字段的起止时间,计算每个小时内的运行时长总和。
内容的提问来源于stack exchange,提问作者dipgirl
相关产品推荐
相关产品推荐

