现有题目描述
有一个员工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 |
注意:可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个。
解题思路
1、利用LIMIT对日期进行降序排列 取第三个日期的数据
2、利用dense_rank()函数取排名第三的函数
方法一:
SELECT *
FROM employees
WHERE hire_date = (
SELECT DISTINCT hire_date -- 注意对日期进行去重
FROM employees
ORDER BY hire_date DESC -- 倒序
LIMIT 1 OFFSET 2 -- 去掉排名倒数第一第二的时间,取倒数第三
);
方法二:
select emp_no ,
birth_date ,
first_name ,
last_name ,
gender,
hire_date
from(
select *,dense_rank() over(order by hire_date desc)id from employees) a
where id=3
此处有个小的知识点:
rank():跳跃排序;
dense_rank():连续排序;
row_number():没有重复值的排序(记录相等也是不重复的)可以进行分页使用。
个人公众号:数分小讲堂
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)