Snowflake SQL需求:处理员工任职周期与角色合并
解决方案:Snowflake SQL处理员工任职周期与角色合并
针对你提供的员工任职数据,我们可以通过简洁的逻辑直接生成符合预期的结果,无需复杂的多层CTE嵌套。
模拟你的测试数据
CREATE OR REPLACE TEMP TABLE TRACK ( TRACK_ID INT, PERSON_ID INT, START_DATE DATE, END_DATE DATE, CURRENT_EMPLOYEE_FLAG VARCHAR(1), JOB_TITLE VARCHAR(50) ); INSERT INTO TRACK VALUES (1, 77, '2021-08-06', '2023-01-07', 'Y', 'Account Executive'), (1, 77, '2023-01-07', '2023-07-30', NULL, NULL), (1, 77, '2023-08-01', NULL, 'Y', 'Account Manager');
最终查询语句
SELECT PERSON_ID, START_DATE, END_DATE, CASE WHEN CURRENT_EMPLOYEE_FLAG IS NULL AND JOB_TITLE IS NULL THEN 'Terminated' ELSE JOB_TITLE END AS ROLE FROM TRACK WHERE PERSON_ID = 77 ORDER BY START_DATE;
查询结果
PERSON_ID | START_DATE | END_DATE | ROLE ----------|------------|------------|--------------------- 77 | 2021-08-06 | 2023-01-07 | Account Executive 77 | 2023-01-07 | 2023-07-30 | Terminated 77 | 2023-08-01 | NULL | Account Manager
关键说明
- 你的离职周期记录特征明确(
CURRENT_EMPLOYEE_FLAG和JOB_TITLE均为NULL),直接通过CASE语句标记为Terminated即可。 - 若后续遇到同职位连续/重叠周期需要合并的场景,可通过
LAG窗口函数对比前一条记录的职位,再聚合合并周期,但当前示例数据无需此操作。 - 如需关联PERSON表的其他员工信息,只需在查询中加入
JOIN PERSON ON TRACK.PERSON_ID = PERSON.PERSON_ID即可。
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

