SQL基于前序行更新临时表 新增列展示员工过往任职岗位
原代码错误点
- LAG 函数取值错误:你需要取上一行的
Job字段作为当前行的上一份岗位,而非取值本身为空的Job from字段 - 分区规则错误:
PARTITION BY仅需要按员工维度ID分组即可,你额外添加了Start、End字段,会导致每个分区仅包含1行数据,LAG 函数无法取到同员工上一行的任职记录 - 排序规则冗余:已经按
ID分区的前提下,ORDER BY仅保留Start升序就可以保证岗位按任职时间先后排序
修复后的代码
如果还未在临时表中新增Job from列,先执行列新增语句:
ALTER TABLE #Main ADD [Job from] VARCHAR(100);
再执行更新语句:
WITH CTE AS( SELECT [ID], [Job], [Start],[End], [Job from], LAG([Job]) OVER (PARTITION BY ID ORDER BY [Start] ASC) AS PreviousJob FROM #Main) UPDATE CTE SET [Job from] = PreviousJob;
执行完成后查询SELECT * FROM #Main ORDER BY ID, Start即可得到你需要的预期结果。
内容的提问来源于stack exchange,提问作者8indie8
相关产品推荐
相关产品推荐

