# 法1:
# select *
# from employees
# order by hire_date DESC
# LIMIT 1 OFFSET 2
# 该方法缺点:鲁棒性差,可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个,也有可能输出的不一定是排名倒数第三的。

# 法2:用排名倒数第三的员工的时间当作筛选条件--子查询(最好)
# 1.查询排名倒数第三的员工的时间
-- 这里必须用去重,因为存在同一个日期入职的员工,不用去重会导致查询出来的日期不是倒数第三
select  *
from employees
where hire_date=(
  select distinct hire_date
  from employees
  order by hire_date desc
  limit 1 offset 2
)

# select distinct hire_date 
# from employees
# order by hire_date DESC
# LIMIT 1 OFFSET 2
# 2.时间筛选
# select *
# from employees
# where hire_date = (select distinct hire_date
#                     from employees
#                     order by hire_date DESC
#                     LIMIT 1 OFFSET 2)

# 法3:按照入职时间先后给员工进行排名,筛选出排名第三的员工--窗口函数
# 1.按照入职时间先后给员工进行排名
# SELECT *,dense_rank()over(order by hire_date desc) posn
# from employees
# 2.筛选出排名第三的员工
# select emp_no,birth_date,first_name,last_name,gender,hire_date
# from (SELECT *,dense_rank()over(order by hire_date desc) posn
#       from employees) as t1
# where posn=3