mysql group by 取想要的结果

今天有个需求,分组后取时间最新的记录,类似如下:
两个表

  • emp 员工表
  • dept 部门表

emp

字段名称 描述
emp_no 员工编号
emp_name 员工姓名
age 年龄
dept_no 部门编号
hiredate 入职日期

dept

字段名称 描述
dept_no 部门编号
dept_name 部门姓名

数据如下:
dept

mysql group by 取想要的结果

emp

mysql group by 取想要的结果

查询每个部门最早入职的员工

SELECT
    * 
FROM
    (
    SELECT
        e.emp_no,
        e.emp_name,
        d.dept_no,
        d.dept_name,
        e.hiredate 
    FROM
        emp e
        INNER JOIN dept d ON e.dept_no = d.dept_no 
    ORDER BY
        e.hiredate ASC 
        LIMIT 1000 
    ) a 
GROUP BY
    dept_no 
ORDER BY
    dept_no

结果

mysql group by 取想要的结果

其中 LIMIT 1000 这个是必须的,如果没有,就不是想要的结果,应该是mysql版本问题

欢迎各位大佬提出更优的解决办法,一起进步,记录此文的目的:一是做个笔记,加深记忆,二是练练如何写文章,三是听从昨天一位大佬的指导,先学学Markdown语法,欢迎大佬指正

本作品采用《CC 协议》,转载必须注明作者和本文链接
你的代码应该是写给下一个开发者的情书。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4
SELECT 
  min(hiredate),
  emp_no,
  emp_name,
  e.dept_no,
  dept_name  
FROM emp e
INNER JOIN dept d 
ON e.dept_no = d.dept_no 
group by e.dept_no;
2年前 评论
lalall (楼主) 2年前
javalaw 2年前
select  emp.emp_no,emp.emp_name, emp.hiredate, d.dept_name from  emp inner join dept d on emp.dept_no = d.dept_no  join (select min(hiredate) as min_hiredate, dept_no from emp group by dept_no) t on emp.dept_no = t.dept_no and hiredate <= min_hiredate;
2年前 评论
lalall (楼主) 2年前
aab

如果你的 mysql 版本是 8.0 可以尝试一下窗口函数!

2年前 评论

mysql 5.7以后版本对排序sql解析优化,忽略子查询排序,需要加limit进行解析,limii要大于查询的数据 dev.mysql.com/doc/refman/5.7/en/li...

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!