首页 > 试题广场 >

查找入职员工时间升序排名的情况下的倒数第三的员工所有信息

[编程题]查找入职员工时间升序排名的情况下的倒数第三的员工所有信息
  • 热度指数:861024 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工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
头像 Karaa
发表于 2020-03-05 19:48:45
入职时间相同的员工可能不止一人 SELECT * FROM employees WHERE hire_date = ( SELECT DISTINCT hire_date FROM employees ORDER BY hire_date DESC -- 展开全文
头像 AgainTree
发表于 2020-03-24 11:25:32
题目: 查找入职员工时间排名倒数第三的员工所有信息 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_n 展开全文
头像 N刻后告诉你
发表于 2020-05-19 20:27:24
题目:查找入职员工时间排名倒数第三的员工所有信息:假定:所有的数据里员工入职的日期都不是同一天 方法1:子查询(最佳)select * from employeeswhere hire_date =(select distinct hire_date from employeesorder by h 展开全文
头像 hata201906112235841
发表于 2020-05-11 17:02:56
select * from employees where hire_date= (select min(a.hire_date) from employees a,employees b where a.emp_no!=b.emp_no and a.hire_date<b.hire_d 展开全文
头像 数据分析阿宇君
发表于 2020-08-15 12:58:24
开窗函数 select emp_no,birth_date,first_name,last_name,gender,hire_date from( select *, row_number() over(order by hire_date desc )as n from employees ) a 展开全文
头像 牛客475582282号
发表于 2022-01-07 15:31:33
关于排名的六种解法 #1、where标量子查询+distinct去重+limit分页查询 select * from employees where hire_date = (             select distinct hire_date from employees         展开全文
头像 雪梦梦
发表于 2021-03-18 13:12:37
方法一:使用ORDER BY对入职时间进行逆序排序,结合LIMIT选取下标为2的那条记录即可。LIMIT 2,1 = LIMIT 1 OFFSET 2 SELECT * FROM employees ORDER BY hire_date DESC LIMIT 1 OFFSET 2方法二:如果有多名并 展开全文
头像 hello-coder
发表于 2021-01-30 12:37:00
解题思路: 思路与第一题基本相同。将 employees 表中的信息按照 hire_date 降序排序,然后取排序后的第三条记录,即 ORDER BY hire_date DESC LIMIT 2,1解释一下 LIMIT 2,1 的意思: SQL 中,行号是从 0 开始的。所以 LIMIT 2,1 展开全文
头像 我见烈焰
发表于 2022-02-26 14:26:57
这题考察窗口函数罢了,了解rank()、dense_rank()、row_number()的用法区别就很简单了。 rank():排序时若存在相同位次记录,则会跳过之后的位次,简单来说一个示例:1,1,3,4,4,6 dense_rank():不跳过。示例:1,1,2,3,3,4 row_numbe 展开全文
头像 OfferCall!
发表于 2021-03-19 11:27:13
使用窗口函数rank,在over子句中对表中的数据按照hire_date进行降序排序,然后取排序为3的数据即可。 select emp_no,birth_date,first_name,last_name,gender,hire_date from ( select emp_no,birt 展开全文