题解 196| #查找入职员工时间排名倒数第三的员工所有信#
查找入职员工时间排名倒数第三的员工所有信息
https://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c
【场景】:查找最大值的所有信息、并列排序
【分类】:窗口函数、dense_rank
分析思路
难点:
1.和SQL195一样,考虑到相同时间入职员工不止一名的情况。
员工表中的入职时间是只记录到天没有精确到秒,会有可能出现最晚入职的员工不止一名的情况。所以这也在启发我们建表的时候最好考虑到这种情况,把入职时间精确到秒。
2.并列排序,不会跳过重复的序号,例如1、1、2
(1)根据入职时间对员工信息排序
- [使用]:窗口函数 dense_rank:并列排序,不会跳过重复的序号,比如1、1、2
- [条件]:order by hire_date desc
(2)取入职时间倒数第三的员工信息
- [条件]:where 3 = date_rank
求解代码
方法一:
with 子查询
with main as( #利用窗口函数 dense_rank:并列排序,不会跳过重复的序号,比如1、1、2 select emp_no, birth_date, first_name, last_name, gender, hire_date, dense_rank() over(order by hire_date desc) as date_rank from employees ) #取入职时间倒数第三的信息 select emp_no, birth_date, first_name, last_name, gender, hire_date from main where 3 = date_rank