如何在数据表中为同一员工添加显示其下一份工作的列?
如何为员工添加「下一份工作」列
原始数据表
| 员工编号 | 职位 | 年份 |
|---|---|---|
| 111 | 护理人员 | 2022 |
| 111 | 医生 | 2021 |
| 111 | 学生 | 2020 |
| 222 | 服务员 | 2022 |
| 222 | 学生 | 2021 |
| 333 | 护士 | 2022 |
预期结果
| 员工编号 | 职位 | 年份 | 下一份工作 |
|---|---|---|---|
| 111 | 护理人员 | 2022 | last job |
| 111 | 医生 | 2021 | 护理人员 |
| 111 | 学生 | 2020 | 医生 |
| 222 | 服务员 | 2022 | last job |
| 222 | 学生 | 2021 | 服务员 |
| 333 | 护士 | 2022 | last job |
解决方案
可以使用SQL窗口函数 LEAD() 实现需求,核心逻辑如下:
- 按员工编号分组,确保只在同一员工的记录内计算
- 按年份降序排序,让最新的工作排在分组内的最前面
- 用
LEAD()抓取当前行的下一行职位,若当前是该员工的最新工作(无下一行),则显示'last job'
示例SQL语句:
SELECT `employee number`, job, year, COALESCE(LEAD(job) OVER (PARTITION BY `employee number` ORDER BY year DESC), 'last job') AS `next job` FROM your_table_name;
细节说明
LEAD(job) OVER (...):在分组内按年份降序排列后,获取当前行的下一行职位值COALESCE(..., 'last job'):当LEAD()返回NULL(即当前是该员工的最新工作)时,将结果替换为'last job'
内容的提问来源于stack exchange,提问作者Bar Fichman
相关产品推荐
相关产品推荐

