题中说明了“员工入职的日期都不是同一天”,可以直接使用ORDER BY逆序排序,再使用LIMIT和OFFSET确定排名倒数第三的员工
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 1 OFFSET 2
如果有多个员工在同一天入职,可以使用子查询:
SELECT * FROM employees WHERE hire_date= (SELECT hire_date FROM employees ORDER BY hire_date DESC LIMIT 1 OFFSET 2)
也可以使用窗口函数,对入职时间计算排名序号,使用WHERE条件过滤:
SELECT emp_no,birth_date,first_name,last_name,gender,hire_date FROM ( SELECT *,DENSE_RANK() OVER (ORDER BY hire_date DESC) AS r FROM employees) AS a WHERE r=3
这里要注意的是外面的查询不能使用*,因为子查询那里多了一个序号r,所以要把各个字段写出来