题目:查找入职员工时间排名倒数第三的员工所有信息:
假定:所有的数据里员工入职的日期都不是同一天
方法1:子查询(最佳)
select * from employees
where hire_date =
(select distinct hire_date from employees
order by hire_date desc
limit 1 offset 2);
或:
select * from employees
where hire_date =
(select hire_date from employees
group by hire_date
order by hire_date desc
limit 1 offset 2);
补充:
若存在多人(如3人)同时在最晚的一天入职的情形,必须要考虑去重(使用distinct或者group by)
distinct和group by的执行顺序都在limit前面
方法2:使用limit或者offset关键字
select * from employees
order by hire_date desc limit 2,1;
或
select * from employees
order by hire_date desc limit 1 offset 2;
总结:
方法1适用于存在多个员工入职同时达到最晚一天的情况。泛用性更好。