题解 | #查找入职员工时间排名倒数第三的员工所有信息#

查找入职员工时间排名倒数第三的员工所有信息

http://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c

知识点

  1. 查找所有信息
  2. 筛选条件 时间=入职时间倒数第三
  3. 入职时间倒数第三使用子查询,入职时间降序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)

思考

  1. 入职员工时间排名倒数第三,有一定歧义rank()over()、dense_rank()over()会产生不一样的结果
  2. 若按照人数排序,即使第一第二同日期,第三名数据序号依然为3,即使用rank()over()
  3. 若按照日期排序,第一第二同日期,那第三行数据序号为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
全部评论
我觉得时间排名倒数第三,就是dense_rank(),按dense_rank()来说,貌似只能用开窗函数,没办法用order by取了
点赞 回复 分享
发布于 2023-03-12 15:12 江苏

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务