根据有序的数字系列分配增量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 次单独面试。
- 第一次尝试就达到了 interview_stage 3
- 第二次尝试达到 interview_stage 2
- 第 3 次尝试达到 interview_stage 4
问题:如果我通过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;
注意:你的问题具体说的是“降低”。不过,我想知道您的意思是否真的是“低于或等于”。如果是后者,将 >=
更改为 >
。
我的 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 次单独面试。
- 第一次尝试就达到了 interview_stage 3
- 第二次尝试达到 interview_stage 2
- 第 3 次尝试达到 interview_stage 4
问题:如果我通过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;
注意:你的问题具体说的是“降低”。不过,我想知道您的意思是否真的是“低于或等于”。如果是后者,将 >=
更改为 >
。