【场景】:查找最大值的所有信息

【分类】:in子查询

分析思路

难点:

1.考虑到最晚入职的员工不止一名的情况。

员工表中的入职时间是只记录到天没有精确到秒,会有可能出现最晚入职的员工不止一名的情况。所以这也在启发我们建表的时候最好考虑到这种情况,把入职时间精确到秒。

如果有多名员工最晚入职如何查找

分两步走,一、先找到入职最晚(最大)日期;二、再根据日期筛选员工信息。

  • [使用]:in、= 子查询

扩展

前往查看:MySQL 嵌套子查询 with子句 from子查询 in子查询 join子查询

错误代码

对入职日期倒排序,取第一条数据。

#错误解法
select *
from employees
order by hire_date desc
limit 1

求解代码

方法一:

in 子查询

select 
    emp_no,
    birth_date,
    first_name,
    last_name,
    gender,
    hire_date
from employees
where hire_date in (
    select
        max(hire_date) as max_date
    from employees)

方法二:

= 子查询

select 
    emp_no,
    birth_date,
    first_name,
    last_name,
    gender,
    hire_date
from employees
where hire_date = (
    select
        max(hire_date) as max_date
    from employees)