写在前面

SQL每日一题是用牛客网的sqlite库的题目进行深度讲解(感觉进度慢的小伙伴可以自行前往刷题),这个系列要开启日更计划,每日一题,一起进步学习。

题目描述

查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天

这个题目所用到的employees表的实例如下:

CREATE TABLE `employees` (
`emp_no` int(11NOT NULL,  -- '员工编号'
`birth_date` date NOT NULL,
`first_name` varchar(14NOT NULL,
`last_name` varchar(16NOT NULL,
`gender` char(1NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

思路

思路1:降序排列取top1
思路2:子查询限定max

思路1有局限性,但这道题用思路1也可以通过,下面详细说说

答案:

# 思路1
select * from employees 
order by hire_date desc limit 1

上面的代码思路是用limit限定对hire_date降序排列后取第一行,假如没有重复的hire_date的话,那么取出来的就是最晚入职的员工信息,当然这样写也能通过调试,因为这道题里明确说明了“员工入职日期都不是同一天”。

limit n 表示从第1条开始(第一条数据所在的行为0),取n条数据
limit m,n 表示从m+1条开始(行m),取n条数据,如limit 1,1 表示从第2条数据开始,取1条,搭配order by使用效果更佳。所以在本题里,除了limit 1这种写法外,还可以写成limit 0,1

但实际案例中确实会存在同一天的情况,那又应该如何做呢?


如上图所示是我随便插入的3条数据,可以看到emp_no为10008和10009的hire_date相同且最晚。

# 思路2select * from employees 
where hire_date = (select MAX(hire_date) from employees)

如上代码,这里用到了子查询,思路是:
1、先用max函数取出最大的hire_date
2、再用where子句限定,hire_date等于刚取出来的最大的hire_date
最后取出的结果如图:


每日一题,进步学习!


©著作权归作者所有:来自51CTO博客作者mb5fe18f5282239的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何处理偏态数据?
  2. 数据分析都有哪些岗位?
  3. 什么是好的数据指标:精益数据分析
  4. 在剪贴板上读取/写入数据,太方便了吧!
  5. 44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  6. 2000万条直播数据,揭秘斗鱼主播生存现状
  7. 破解X眼电影字体动态加密|凹凸玩数据
  8. Python爬取上万条大众点评数据,解读一线快餐品牌背后的秘密
  9. 放大招!耗时一个月,早起做了一个Python数据可视化APP?

随机推荐

  1. 为什么我不能在此查询中进行任何类型的加
  2. 使用SQL使用从左到右和从右到左混合语言
  3. SQL Server 2005与SQL Server 2000相比性
  4. tp3.2结合mysql实现微信自定义分享链接和
  5. 统计查询-根据条件进行count的两种实现方
  6. Spring JdbcTemplate 批量插入或更新操作
  7. 多表连接查询
  8. C#使用SqlBulkCopy将DataTable写入数据库
  9. 找到另一个列至少有两个不同值的id
  10. 一条牛B的SQL抵了我300多行的程序代码