这是SQL今日一题的第二篇文章
题目描述
查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天
所用到的表还是之前的employees表

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL, -- '员工编号'
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
思路
思路1:limit限定
思路2:子查询
答案
# 思路1
select * from employees
order by hire_date desc limit 2,1
1、先order by降序排列
2、再limit限定,昨天说的limit m,n用到了,limit m,n表示从第m+1条数据开始,取n条数据,那么limit2,1就表示从第3条数据开始,取1条数据,这样就取了倒数第3条数据了。

用子查询的思路和上一题是一样的,也是假如hire_date有重复怎么办?如上图所示,如果用思路1取到的是第3条数据,也就是hire_date = 1995-05-23这一条,但实际上它排名倒数第二,所以要用子查询去重。
# 思路2
select * from employees where hire_date =
(select distinct hire_date from employees
order by hire_date desc limit 2,1)
1、先对hire_date去重,然后order by降序limit限定取出真正的倒数第3条数据的hire_date
2、再子查询where子句限定,让hire_date 等于刚取出的倒数第三
distinct 关键字放在列名的前面,表示对某一列去重
猜你喜欢:
20000字的深度分析 ,让你彻底搞懂《电信用户流失预测模型》
@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容

