sql - t-sql 在组内重复行号
问题描述
每次任务历史记录中的名称更改时,我都需要创建一个 ID。rank 需要对每个task 和 step重新启动。
我最接近目标的是使用下面的代码。
但是当一个人再次出现在历史动作列表中时,它不会产生正确的结果。
DENSE_RANK() OVER (ORDER BY TaskName, Person)
提前致谢
解决方案
您可以使用lag()
来查看一个人的变化。然后使用累积和:
select t.*,
sum(case when prev_person = person then 0 else 1 end) over
(partition by task_name order by timestamp) as desired_output
from (select t.*,
lag(person) over (partition by task_name order by timestamp) as prev_person
from t
) t ;
注意:我将您的问题解释为您希望为每个任务分别提供数字(“每次任务历史记录中的名称更改”)。
编辑:
根据您的评论:
select t.*,
sum(case when prev_person = person and prev_stop_name = step_name then 0 else 1 end) over
(partition by task_name order by timestamp) as desired_output
from (select t.*,
lag(person) over (partition by task_name order by timestamp) as prev_person,
lag(step_name) over (partition by task_name order by timestamp) as prev_step_name
from t
) t ;