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

SQL Server合并连续匹配的多行数据为单行的实现方案咨询

SQL Server 连续行合并(孤岛问题)实现方案

你之前用到的双ROW_NUMBER()差值计算分组标识的思路是正确的,失败大概率是遗漏了后续聚合的分组条件配置,完整实现逻辑如下:


完整SQL代码

WITH group_mark AS (
    SELECT
        *,
        -- 计算相同属性组的连续标识
        ROW_NUMBER() OVER(ORDER BY id) 
        - ROW_NUMBER() OVER(PARTITION BY groupId, name, email, phone ORDER BY id) AS seq
    FROM 你的表名
)
SELECT
    groupId,
    name,
    email,
    phone,
    MIN(start_time) AS start_time,
    MAX(end_time) AS end_time
FROM group_mark
-- 注意:必须把属性字段和seq共同作为分组键
GROUP BY groupId, name, email, phone, seq
-- 保持输出顺序和原数据行顺序一致
ORDER BY MIN(id)

逻辑说明

  • 连续行的判定依据为id升序:同属性的行只要在id排序下是连续的序列,两个ROW_NUMBER()的差值就是固定值,也就是我们用来分组的seq
  • 当任意一个分组属性(groupId/name/email/phone)发生变化时,PARTITION BY后的ROW_NUMBER()会重置计数,seq值就会发生变化,以此区分不同的连续分组
  • 如果你的连续判定依据是start_time而非id,只需要把两处ORDER BY id统一替换为ORDER BY start_time即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:02