求助:使用分析函数查询各部门最晚入职且ID最小的员工
问题排查与修正
你的SQL存在几个关键问题,导致无法正确输出结果:
- 子查询只生成了行号,没有选择员工的其他字段,外层查询根本拿不到员工的ID、姓名等信息
ROW_NUMBER()没有设置别名,WHERE子句里的A = 1完全找不到对应的字段- 排序逻辑不满足需求:只按入职日期倒序,没处理入职日期相同的情况,需要追加
employee_id asc来保证同部门最晚入职的员工里选ID最小的 - 子查询的表别名和外层的别名重复,容易引发语法混淆
修正后的SQL如下:
SELECT employee_id, department_id, first_name, last_name, hire_date, job_id FROM ( SELECT employee_id, department_id, first_name, last_name, hire_date, job_id, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY hire_date DESC, employee_id ASC) AS rn FROM hr.EMPLOYEES ) t WHERE rn = 1;
关键修改说明:
- 子查询中新增了所有需要展示的员工字段,同时给
ROW_NUMBER()结果起别名rn - 排序规则补充
employee_id ASC,确保同部门入职日期最晚的员工中,ID最小的会被标记为行号1 - 外层查询通过别名
t引用子查询结果,过滤行号rn = 1的记录,得到各部门符合要求的员工
内容的提问来源于stack exchange,提问作者Jony_Junior
相关产品推荐
相关产品推荐

