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

T-SQL实现任务、步骤分组内重置行号 人员变更时生成对应ID

问题解决实现方案

核心问题分析

你当前使用的DENSE_RANK()逻辑只会给同一个任务下不同的处理人分配固定序号,无法识别同一处理人在后续流程中再次接手的相邻变更场景,这类场景属于SQL经典的间隙与孤岛问题,需要按操作顺序做相邻对比实现。

实现前提

你的任务历史表必须存在可以标记操作先后顺序的字段,比如操作时间operate_time、操作记录自增IDoperate_id,以下示例默认使用operate_id作为排序依据。

完整实现代码

SELECT 
  TaskName,
  StepId,
  Person,
  operate_time,
  -- 累加变更标记得到最终的变更序号
  SUM(change_flag) OVER (
    PARTITION BY TaskName, StepId 
    ORDER BY operate_id 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS change_id
FROM (
  SELECT 
    *,
    -- 判断当前处理人和上一条是否不一致,不一致则标记为1,否则为0
    CASE 
      WHEN Person = LAG(Person) OVER (
        PARTITION BY TaskName, StepId 
        ORDER BY operate_id
      ) THEN 0 
      ELSE 1 
    END AS change_flag
  FROM task_history
) t

逻辑说明

  • 内层查询首先按TaskName、StepId分组,组内按操作顺序排序,用LAG()窗口函数取同组上一条记录的处理人,和当前处理人对比生成变更标记
  • 外层查询对变更标记做组内累加,每次遇到标记为1(处理人变更)时序号自动+1,即使同一处理人后续再次接手,也会生成新的序号,完全匹配需求。

效果示例

假设某任务某步骤的处理人操作顺序为:张三→张三→李四→张三→王五,生成的change_id结果为:1→1→2→3→4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:39:03