题目

查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

答案

select * from employees where hire_date = (select hire_date from employees order by hire_date desc limit 2,1)

或者

select * from employees where hire_date = (select hire_date from employees order by hire_date desc limit 1 offset 2)

题解

这道题要求选择出入职倒数第三的员工,我们还是需要先选择出倒数第三的日期。

这里我们先选择出所有的日期,然后按照倒序排列(Orde by xxx DESC)。

排列后我们再进行选择特定的条数,这里要倒数第三天,所以我们需要跳过两条选择第三条,有两种实现方式。

limit 2,1:这个语句的意思是跳过前两条选择第三条这一条。
limit 1 offset 2:这句话的意思是选择一条,跳过两条。

这道题由于已经给定入职时间均为不同,所以我们不需要去重,如果去重可以在选择入职时间时加上Distinct

总结

offset X 是跳过X个数据
limit Y 是选取Y个数据
limit X,Y 中X表示跳过X个数据,读取Y个数据
SELECT DISTINCT 列名称 FROM 表名称 去重


醉后不知天在水,满船清梦压星河