题目描述
查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天
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
ORDER BY hire_date DESC
LIMIT 1 OFFSET 2;
SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 2,1;
解题思路
和第一题一样,用ORDER BY,DESC对入职时间进行排序,使用LIMIT,OFFSET函数取第一行数据得到结果。
扩展问题
题目中为了减轻入门难度,所有的数据里员工入职的日期都不是同一天,如果有同一天的情况应该如何查询呢?
答案
SELECT *
FROM employees
WHERE hire_date = (
SELECT DISTINCT hire_date --用DISTINCT取不重复的入职时间
FROM employees
ORDER BY hire_date DESC --入职时间倒序排列
LIMIT 1 OFFSET 2 --选第三行的值,也就是我们想要的入职日期
);
解题思路
当有多个员工同一天入职时,我们如果还用LIMIT会不知道取几行数值,这种情况可以用子查询找到入职倒数第三的员工,值得注意的是当有几个人同时在一天入职的时候我们需要用DISTINCT对日期进行限制。