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

SQL Server查询中对连续groupid分组生成唯一递增新组ID的实现方案

SQL Server 实现连续同groupid分组生成递增newGroupId

需求说明

现有包含uid、groupid两个字段的表,需要按照uid升序排序后,将连续出现的相同groupid划分为同一个新组,生成唯一递增的newGroupId字段。

实现思路

这是典型的序列孤岛问题,通过两次窗口函数即可实现:

  • 用LAG()窗口函数获取按uid排序后上一行的groupid值
  • 标记当前行groupid与上一行是否不同,不同则记为1,相同记为0
  • 对标记值做累加求和,得到的结果就是递增的newGroupId

实现代码

-- 请将代码中的user_group替换为你的实际表名
WITH lag_cte AS (
    SELECT 
        uid,
        groupid,
        LAG(groupid, 1, -1) OVER (ORDER BY uid) AS prev_groupid
    FROM user_group
),
flag_cte AS (
    SELECT 
        uid,
        groupid,
        CASE WHEN groupid != prev_groupid THEN 1 ELSE 0 END AS change_flag
    FROM lag_cte
)
SELECT 
    uid,
    groupid,
    SUM(change_flag) OVER (ORDER BY uid ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - 1 AS newGroupId
FROM flag_cte
ORDER BY uid;

输出验证

执行上述代码后输出结果和预期完全匹配:

uidgroupidnewGroupId
100
200
311
411
511
611
702
802
923
1023
1123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:01