如何编写SQL查询为同ID记录新增to_dt列(取后续行from_dt)
解决方案:为记录添加结束日期(to_dt)
假设你的表名为employee_company,可以使用窗口函数LEAD实现需求,这是当前最优的写法,无需自连接,性能更优:
SELECT id, company_id, from_dt, LEAD(from_dt) OVER (PARTITION BY id ORDER BY from_dt) AS to_dt FROM employee_company;
代码说明:
PARTITION BY id:按员工id分组,确保只在同一个员工的记录间计算结束日期ORDER BY from_dt:组内按入职日期from_dt升序排序,保证下一条记录是该员工的下一段任职开始日期LEAD(from_dt):获取当前记录的下一条记录的from_dt值,若当前是组内最后一条记录,则返回NULL
执行结果:
| id | company_id | from_dt | to_dt |
|---|---|---|---|
| 111 | 345 | 200601 | NULL |
| 112 | 345 | 200603 | 200703 |
| 112 | 379 | 200703 | NULL |
| 113 | 338 | 200808 | 200912 |
| 113 | 309 | 200912 | 201009 |
| 113 | 391 | 201009 | NULL |
| 114 | 318 | 200910 | NULL |
内容的提问来源于stack exchange,提问作者Pop23
相关产品推荐
相关产品推荐

