查找入职员工时间排名倒数第三的员工所有信息

查找入职员工时间排名倒数第三的员工所有信息,第1张

​现有题目描述

​有一个员工employees表简况如下:

emp_no birth_date first_name last_name genderhire_date 
100011953-09-02Georgi Facello M1986-06-26
100021964-06-02Bezalel Simmel F1985-11-21
10003 1959-12-03Parto Bamford M1986-08-28
10004 1954-05-01Christian Koblick M1986-12-01
 

请你查找employees里入职员工时间排名倒数第三的员工所有信息,以上例子输出如下:

emp_no birth_date first_name last_name gender hire_date 
100011953-09-02Georgi Facello M1986-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():没有重复值的排序(记录相等也是不重复的)可以进行分页使用。

个人公众号:数分小讲堂

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/722123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存