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

如何在SQL Server中移除数据集的重复审批中间节点行

在SQL Server中移除审批流程中间行的实现方案

需求说明

现有审批数据集:

emp_codeApr_Level_IdReviewByReviewByEmp_Codew_Stage
111111110
1112321431
1112421442
1112521433
111NULL3700

审批流程按ReviewBy和w_Stage升序推进,当同一emp_code+ReviewBy层级下,同一个ReviewByEmp_Code多次出现时,需要保留**最后一次出现(最大w_Stage)**的记录,并移除中间的所有相关行,最终得到:

emp_codeApr_Level_IdReviewByReviewByEmp_Codew_Stage
111111110
1112521433
111NULL3700

实现SQL语句

以下是基于CTE和聚合逻辑的解决方案:

WITH cte_max_stage AS (
    -- 标记每个员工、审批层级下,每个审批人的最后审批阶段
    SELECT emp_code, ReviewBy, ReviewByEmp_Code, MAX(w_Stage) AS max_w_stage
    FROM your_table
    GROUP BY emp_code, ReviewBy, ReviewByEmp_Code
),
cte_dup_ranges AS (
    -- 定位存在重复审批人的层级中,重复阶段的起止范围
    SELECT 
        emp_code,
        ReviewBy,
        MIN(w_Stage) AS min_dup_stage,
        MAX(w_Stage) AS max_dup_stage
    FROM your_table t
    -- 筛选出存在更早记录的审批人(即重复出现的审批人)
    WHERE EXISTS (
        SELECT 1 FROM cte_max_stage ms
        WHERE ms.emp_code = t.emp_code 
          AND ms.ReviewBy = t.ReviewBy 
          AND ms.ReviewByEmp_Code = t.ReviewByEmp_Code
          AND ms.max_w_stage > t.w_Stage
    )
    GROUP BY emp_code, ReviewBy
)
SELECT t.*
FROM your_table t
LEFT JOIN cte_dup_ranges r 
    ON t.emp_code = r.emp_code 
    AND t.ReviewBy = r.ReviewBy 
    AND t.w_Stage BETWEEN r.min_dup_stage AND r.max_dup_stage
WHERE 
    -- 保留条件:不在重复阶段区间内,或是该审批人的最后一次记录
    r.emp_code IS NULL
    OR EXISTS (
        SELECT 1 FROM cte_max_stage ms
        WHERE ms.emp_code = t.emp_code 
          AND ms.ReviewBy = t.ReviewBy 
          AND ms.ReviewByEmp_Code = t.ReviewByEmp_Code
          AND ms.max_w_stage = t.w_Stage
    );

逻辑解释

  1. cte_max_stage:通过分组聚合,确定每个审批人在对应层级下的最后审批阶段,用于后续识别需要保留的最终记录。
  2. cte_dup_ranges:找出存在重复审批人的层级中,重复阶段的起止区间(从第一次出现重复审批人的阶段到最后一次出现的阶段),明确需要移除的中间行范围。
  3. 最终查询:通过左连接判断当前行是否在重复区间内,不在区间内的行直接保留;在区间内的行仅保留属于审批人最后一次记录的行,从而移除所有中间冗余行。

注意事项

  • 将your_table替换为实际的表名。
  • 若存在多个emp_code或ReviewBy层级,该语句会自动批量处理所有符合条件的记录。
  • 对于NULL值(如示例中的Apr_Level_Id),SQL Server会正常处理,不影响逻辑执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:10:20