根据有序的数字系列分配增量ID sql table

Assign incremental id based on number series in ordered sql table

我的 table 面试候选人有三列,看起来像这样(attempt 是我要计算的):

candidate_id interview_stage stage_reached_at attempt <- want to calculate
1 1 2019-01-01 1
1 2 2019-01-02 1
1 3 2019-01-03 1
1 1 2019-11-01 2
1 2 2019-11-02 2
1 1 2021-01-01 3
1 2 2021-01-02 3
1 3 2021-01-03 3
1 4 2021-01-04 3

table 代表 candidate_id 1 人曾在一家公司进行过 3 次单独面试。

问题:如果我通过stage_reached_at订购,我能以某种方式使用数字系列吗?只要特定 candidate_id 的下一步比前一行 ,我就知道这是一个新过程。

我希望能够在一天结束时在 candidate_id 和 process_grouping 上分组。

提前致谢。

您可以使用lag(),然后是累加和:

select t.*,
       sum(case when prev_interview_stage >= interview_stage then 1 else 0 end) over (partition by candidate_id order by stage_reached_at) as attempt
from (select t.*,
             lag(interview_stage) over (partition by candidate_id order by stage_reached_at) as prev_interview_stage
      from t
     ) t;

注意:你的问题具体说的是“降低”。不过,我想知道您的意思是否真的是“低于或等于”。如果是后者,将 >= 更改为 >