题解 | #查找入职员工时间排名倒数第三的员工所有信息#
查找入职员工时间排名倒数第三的员工所有信息
http://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c
知识点
- 查找所有信息
- 筛选条件 时间=入职时间倒数第三
- 入职时间倒数第三使用子查询,入职时间降序desc排序order by,只取倒数第三行日期 limit 1 offset 2表示从第三行数据取,只取一行
代码
select * from employees
where hire_date=(select hire_date
from employees
order by hire_date desc
limit 1 offset 2)
思考
- 入职员工时间排名倒数第三,有一定歧义rank()over()、dense_rank()over()会产生不一样的结果
- 若按照人数排序,即使第一第二同日期,第三名数据序号依然为3,即使用rank()over()
- 若按照日期排序,第一第二同日期,那第三行数据序号为2而不是3,则须使用dense_rank()over()
代码
select emp_no, birth_date, first_name, last_name, gender, hire_date
from (select emp_no, birth_date, first_name, last_name, gender, hire_date, rank()over(order by hire_date desc) as posn
from employees) as rk
where rk.posn = 3