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

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

https://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c

思路分析:

首先分析题意,题目意思是要找出入职时间等于倒数第三的时间的所有员工,并且可能存在多个员工入职时间是同一天的情况。要注意这里的倒数第三是排名倒数第三的时间,而不是倒数第三行的时间,即由于可能存在入职时间相同的员工,我们需要对他们的入职时间进行去重,去重后找到倒数第三的入职时间。要找到升序排列倒数第三,最简单的方式就是倒序排列找第三即可,两种思路,一种是使用子查询找到倒数第三的时间,放到WHERE条件中进行筛选,另外一种是使用派生表,派生表中使用窗口函数DENSE_RANK()增加一列排序列,筛选出序号为3的记录即可。

代码解释:

SELECT *
FROM
    employees
WHERE
    hire_date = 
    (
        SELECT DISTINCT
            hire_date
        FROM
            employees
        ORDER BY
            hire_date DESC
        LIMIT
            2, 1
    )
ORDER BY
    emp_no; 

此处只演示第一种思路,在WHERE子句中使用嵌套子查询找到倒数第三的入职时间,使用SELECT DISTINCT对hire_date进行去重,LIMIT在对去重后的结果进行限制,找到倒序排第三的hire_date,之后在主查询中对hire_date筛选等于该日期的即可。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务