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

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

http://www.nowcoder.com/questionTerminal/ec1ca44c62c14ceb990c3c40def1ec6c

入职时间相同的员工可能不止一人

SELECT * 
FROM employees
WHERE hire_date = (
    SELECT DISTINCT hire_date 
    FROM employees
    ORDER BY hire_date DESC       -- 倒序
    LIMIT 1 OFFSET 2              -- 去掉排名倒数第一第二的时间,取倒数第三
);    
全部评论
脱了裤子放屁
4 回复 分享
发布于 2021-03-10 17:52
为什么把 = 改成 in 会报错...
1 回复 分享
发布于 2021-12-24 10:02
假设多个人的时间相同 题目不是问你这一类的时间 这题感觉不能这么写
1 回复 分享
发布于 2020-06-30 11:19
select * from employees order by hire_date desc limit 2,1;这不更简单点?
49 回复 分享
发布于 2020-05-11 11:04
这样去重的话,如果最后一天入职有多个,那么倒数第三个入职的就不一定是倒数第三天入职的那些人
7 回复 分享
发布于 2021-06-14 23:26
题目清清楚楚 "目前所有的数据里员工入职的日期都不是同一天"。 那么去重还有必要嘛?
7 回复 分享
发布于 2020-08-04 16:31
感觉这样写没什么问题啊,sql语句执行顺序:from ... on ... join ... where ... group by ... having ... select ...dinstinct ... order by ...limit ...
5 回复 分享
发布于 2021-08-12 21:35
按照这个逻辑的话 假如排序前三名的日期一致 那你按第三个的时间查找 不是连同排名第一第二的也取到了嘛
4 回复 分享
发布于 2021-07-10 20:32
把这个答案放进去,没通过。。。
4 回复 分享
发布于 2021-01-12 11:01
请问如果有多人同时入职,select distinct 是否还有必要?
4 回复 分享
发布于 2020-05-06 18:09
散了吧,这么写是没问题的。其一现在题目是有重复的,应该是题目改了;其二DISTINCT的执行顺序先于ORDER BY。
3 回复 分享
发布于 2022-01-12 08:42
首先写SQL不是语法第一,是思路第一,别纠结limit这个问题,解题思路是这样的,要查入职倒数第三的日期,那么前提是每一个入职日期都可能有重复,那么整体思路就是,查询入职日期=倒数第三的所有信息,但是倒数第二和第一可能有100人,那么用DISTINCT去重复排列出来就是最简单的答案了。
2 回复 分享
发布于 2022-08-29 11:15 广东
ofset是偏移量,如果数据量不清楚的情况这么取就不对了吧
2 回复 分享
发布于 2022-05-10 13:06
这个在where的窗口函数中加一个group by hire_date
1 回复 分享
发布于 2024-07-29 15:31 广西
去重时间字段,不就把同一时间的其他入职员工去掉了,只剩下一个员工的所有信息吗?入职时间相同的员工可能不止一人,不严谨不能去重的,通过dense_rank窗口函数按时间字段排序就好了,把等于3的拿出来,这样多个排名第三的都会拿到
1 回复 分享
发布于 2024-03-05 15:57 重庆
这个是正确周全的解法,你可以看到,子查询最终返回的是经过筛选出的`hire_date`,而它现在是条件了,接下来符合`= hire_date`条件的信息都会被列出来,无论多少个。
1 回复 分享
发布于 2024-01-28 13:43 上海
牛笔的解法被几个***鄙视 笑了
1 回复 分享
发布于 2022-05-10 14:18
可以看看我的 select distinct e1.* from employees e1 join ( select hire_date,dense_rank() over(order by hire_date desc) date_rank from employees ) t on e1.hire_date = t.hire_date and t.date_rank = 3;
1 回复 分享
发布于 2022-05-06 17:51
题目没讲并列,但是实际业务当中还是要考虑的
1 回复 分享
发布于 2022-03-29 00:55
select [emp_no] ,[birth_date] ,[first_name] ,[last_name] ,[gender] ,[hire_date] from (select *,rank() over(order by hire_date desc) as ran_nu from [test].[dbo].[employees]) t1 where ran_nu = 3
1 回复 分享
发布于 2021-06-29 10:50

相关推荐

04-06 11:24
已编辑
太原学院 C++
真烦好烦真烦:感觉不太对劲,这种主动加微信的一般都是坑,要小心辨别
点赞 评论 收藏
分享
评论
679
39
分享

创作者周榜

更多
牛客网
牛客企业服务