Loading

MySQL: 相邻1分钟时间间隔的数据分组

需求

把data_time相邻1分钟的分为一组,输出组数及该组对应的数据条数。

输入:
image

输出:
image

解决

WITH ranked_data AS (
  SELECT 
    vin,
    data_time,
    -- 计算当前行与上一行的时间差(秒)
    CASE 
      WHEN LAG(data_time) OVER (PARTITION BY vin ORDER BY data_time) IS NULL THEN NULL
      ELSE timestampdiff(minute, LAG(data_time) OVER (PARTITION BY vin ORDER BY data_time), data_time)
    END AS time_diff
  FROM t
), group_markers AS (
  SELECT 
    vin,
    data_time,
    -- 当时间差>1分钟或没有前一行时,标记为新组的开始
    SUM(CASE WHEN time_diff IS NULL OR time_diff > 1 THEN 1 ELSE 0 END) 
      OVER (PARTITION BY vin ORDER BY data_time) AS group_id
  FROM ranked_data
)

SELECT 
  group_id,
  COUNT(*) AS group_cnt
FROM group_markers
GROUP BY group_id
ORDER BY group_id;
posted @ 2025-06-22 17:07  拾月凄辰  阅读(14)  评论(0)    收藏  举报