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

SQL中利用DENSE_RANK()实现特定分组连续行统一编号需求

问题分析

你当前使用的DENSE_RANK()写法无法满足需求,原因是:该函数在PARTITION BY Uniq_ID, Dep_Group的分区内,会按Sequence排序生成不同的排名,导致同一Uniq_ID下的WES行(如Line1和Line2)得到不同的New_Col值,无法合并。

解决方案

采用岛屿分组的思路,通过判断每行是否为新组的起始行,再累计求和生成连续的组编号,实现同一Uniq_ID下连续的WES行分配相同编号的需求:

SELECT 
    Line,
    Uniq_ID,
    Start_DT,
    End_DT,
    Sequence,
    Department,
    Dep_Group,
    SUM(is_new_group) OVER (ORDER BY Line) AS New_Col
FROM (
    SELECT 
        *,
        CASE
            -- 当前行属于WES组,且与上一行是同一Uniq_ID的WES组 → 不属于新组
            WHEN Dep_Group = 'WES' 
                 AND LAG(Uniq_ID) OVER (ORDER BY Line) = Uniq_ID 
                 AND LAG(Dep_Group) OVER (ORDER BY Line) = 'WES' 
            THEN 0
            -- 非WES行/新Uniq_ID的WES行 → 属于新组
            ELSE 1
        END AS is_new_group
    FROM TblA
) AS sub
ORDER BY Line;
执行结果

该代码会生成你预期的结果:

LineUniq_IDStart_DTEnd_DTSequenceDepartmentDep_GroupNew_Col
112023-01-022023-01-031WESWES1
212023-01-022023-01-032WESWES1
312023-01-022023-01-033DEMNULL2
422023-01-022023-01-031WESWES3
532023-01-022023-01-031WESWES4
632023-01-022023-01-032WESWES4
742023-01-022023-01-031DEMNULL5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:53:14