题解 | #查找入职员工时间排名倒数第三的员工所有信息#
查找入职员工时间排名倒数第三的员工所有信息
https://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c
#第一种方案 # with # dateList as ( # select # *, # dense_rank() over ( # order by # hire_date # ) as ranknum # from # employees # ) # select # * # from # employees # where # hire_date in ( # select # hire_date # from # dateList # where # ranknum = ( # select # max(ranknum) # from # dateList # ) - 2 # ) #第二种 利用order by offset select * from employees where hire_date = ( select distinct hire_date from employees order by hire_date desc limit 2,1 ) # 如果要求出入职倒数第三的情况,也就是按照入职时间降序排序,正数第三个,但是入职人数会有多人,所以需要在子查询中查询日期放到条件查询中。
本题难度不是很高,个人有2种方法解决,一种是根据dense_rank排序,这种排序是非跨越式的,是可以通过查询最高的排名(正序)减去-2的情况来判断,这种排序可以在同一个顺序中对应多种情况。同理也可以先distinct求出所有入职的时间,根据查重后入职时间的数量-2
第二种方法就是
通过order by limit的方法。因为要求出倒数第三晚入职的情况,如果数据量正向排序,可以根据入职时间逆向排序,第三位就是入职时间倒数第三晚的情况。也就是limit 2,1 或者limit1 offset 2