题解 | #查找入职员工时间排名倒数第三的员工所有信息#
查找入职员工时间排名倒数第三的员工所有信息
http://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c
方法一: 窗口函数【错误解法】
# select *
# from employees
# where hire_date = (select hire_date
# from(select hire_date, row_number() over(order by hire_date desc) as num
# from employees) a
# where a.num = 3)
# ;
错误原因:在开窗函数中,若order by 后的字段值不唯一,即出现雇用日期相同的情况,则会导致排序出现问题
方法一的改进:窗口函数【正确解法】
select *
from employees
where hire_date = (select distinct hire_date
from(select hire_date, dense_rank() over(order by hire_date desc) as num
from employees) a
where a.num = 3)
;
注意:这里需要使用dense_rank(),而不能使用rank(),具体区别请自行搜索查阅。
方法二:limit与offset的使用【正确解法】
select *
from employees
where hire_date = (select distinct hire_date from employees order by hire_date desc limit 1 offset 2)
;