【场景】:查找最大值的所有信息、并列排序
【分类】:窗口函数、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

京公网安备 11010502036488号