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

如何用SQL排名函数生成按ID重置、CODE递增的SetOrder列?

实现同一ID下CODE分组递增的SetOrder列

直接使用**窗口函数组合(LAG + SUM累加)**即可实现需求,完整SQL如下:

SELECT 
    [OPEN_DATE],
    [CODE],
    [ID],
    ROW_NUMBER() OVER (PARTITION BY [ID],[CODE] ORDER BY [OPEN_DATE],[CODE]) AS [RowOrder],
    -- 核心逻辑:生成SetOrder列
    SUM(CASE 
        WHEN LAG([CODE]) OVER (PARTITION BY [ID] ORDER BY [OPEN_DATE],[CODE]) = [CODE] THEN 0
        ELSE 1
    END) OVER (PARTITION BY [ID] ORDER BY [OPEN_DATE],[CODE] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [SetOrder]
FROM [Table]
ORDER BY [ID], [OPEN_DATE], [CODE], [RowOrder];

逻辑拆解

  1. LAG函数:在同一ID的分区内,按OPEN_DATE、CODE排序,获取当前行的上一行CODE值(分区第一行无前置行时返回NULL)。
  2. CASE标记:如果当前行CODE与上一行相同,标记为0;若不同(含分区第一行),标记为1。
  3. SUM累加:在同一ID分区内,对上述标记值做连续累加,最终得到的SetOrder会自动满足:同一CODE组内值一致,CODE变更时递增,ID切换时重置为1。

执行上述SQL后,结果将完全匹配你给出的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:15:11