这题考察窗口函数罢了,了解rank()、dense_rank()、row_number()的用法区别就很简单了。
- rank():排序时若存在相同位次记录,则会跳过之后的位次,简单来说一个示例:1,1,3,4,4,6
- dense_rank():不跳过。示例:1,1,2,3,3,4
- row_number():赋予连续唯一的位次。示例:1,2,3,4,5,6
题意很明显,有个关键点是:可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个。
那么显然,这里该用dense_rank()窗口函数。
select emp_no,birth_date,first_name,last_name,gender,hire_date
from (
select *,
dense_rank() over(order by date_format(hire_date,'%Y%m%d') desc) as ranking
from employees
) as t
where ranking=3