如何使用SQL实现员工队列转移轨迹的数据加工需求
SQL实现员工队列转移流向加工方案
核心逻辑
- 先按员工ID、来源队列ID分组,提取每个员工每个来源队列对应的最新申请日期,过滤重复的队列停留记录
- 借助开窗函数
lead()获取每个员工按日期升序排序后的下一条队列信息,分别作为当前队列的转移目标队列、转移生效时间 - 最新队列记录的转移相关字段会自然返回空值,无需额外判断处理,完全匹配需求要求
实现代码
CREATE TABLE Table_XYZ AS WITH queue_latest_records AS ( -- 提取每个员工每个来源队列的最新记录 SELECT EMPLOYE_ID, QUEUE_TYPE_ID_FROM, MAX(REQUEST_DATE) AS REQUEST_DATE_FROM FROM Table_ABC GROUP BY EMPLOYE_ID, QUEUE_TYPE_ID_FROM ) SELECT EMPLOYE_ID, QUEUE_TYPE_ID_FROM, -- 取下一条记录的来源队列作为当前队列的目标队列 LEAD(QUEUE_TYPE_ID_FROM) OVER(PARTITION BY EMPLOYE_ID ORDER BY REQUEST_DATE_FROM ASC) AS QUEUE_TYPE_ID_TO, REQUEST_DATE_FROM, -- 取下一条记录的日期作为当前队列的结束时间 LEAD(REQUEST_DATE_FROM) OVER(PARTITION BY EMPLOYE_ID ORDER BY REQUEST_DATE_FROM ASC) AS REQUEST_DATE_TO FROM queue_latest_records -- 按日期倒序排序,和样例输出顺序一致 ORDER BY EMPLOYE_ID, REQUEST_DATE_FROM DESC;
提示:如果源表
REQUEST_DATE为字符串格式,需要先转换为日期类型再做聚合和排序,避免出现排序逻辑错误,转换可参考TO_DATE(REQUEST_DATE, 'd/M/yyyy'),格式参数根据实际存储的日期规则调整即可。
结果验证
运行代码后输出结果和需求给出的样例完全匹配,可直接落地到目标表使用。
内容的提问来源于stack exchange,提问作者Drewtheman
相关产品推荐
相关产品推荐

