一、题目
查找入职员工时间排名倒数第三的员工所有信息
有一个员工employees表简况如下:
emp_no | birth_date | first_name | last_name | gender | hire_date |
10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
10003 | 1959-12-03 | Parto | Bamford | M | 1986-08-28 |
10004 | 1954-05-01 | Christian | Koblick | M | 1986-12-01 |
请你查找employees里入职员工时间升序排名的情况下倒数第三的员工所有信息,以上例子输出如下:
emp_no | birth_date | first_name | last_name | gender | hire_date |
10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
注意:可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个,存在多个员工的情况按照emp_no升序排列。
示例1
输入:
drop table if exists `employees` ; 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`)); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'); INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12'); INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02'); INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10'); INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15'); INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18'); INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24'); INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');
输出:
emp_no|birth_date|first_name|last_name|gender|hire_date 10005|1955-01-21|Kyoichi|Maliniak|M|1989-09-12
二、分析与sql
分析:
-
LIMIT 1:
LIMIT
子句用于限制查询结果的数量。在这里,LIMIT 1
表示查询结果只返回一条记录。
-
OFFSET 2:
OFFSET
子句用于指定在返回结果之前需要跳过的记录数。在这里,OFFSET 2
表示跳过排序后的前两条记录。
-
LIMIT 2, 1 的意思是: LIMIT 2:跳过结果集中的前 2 条记录。 LIMIT 1(紧跟在逗号后面):返回跳过前 2 条记录之后的 1 条记录。
sql语句:
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 distinct hire_date
from employees
order by hire_date desc
limit 2,1);