知识点

  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