MySQL使用group by分组查询每组最新的一笔数据实现方式

 更新时间:2025年06月29日 13:19:20   作者:yuhuofei2021  
这篇文章主要介绍了MySQL使用group by分组查询每组最新的一笔数据实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题来源

今天遇到一个查询数据库数据的问题:要获取每个分组最新的一笔数据,并将每个分组最新的一笔数据重新组成一个新的列表

这种场景,当然是想到了分组查询,使用 group by,思路也很清晰:

  • 将所有记录根据时间 order by desc ,倒叙排列一遍
  • 将第1步中的数据,group by 一下,就能得到想要的列表

按这个思路,得到的 sql 语句如下:

select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
) t
group by t.department;

思路没有问题,语句也没有问题,但执行后,却怎么也得不到想要的结果

这里有一个大坑,那就是从 mysql 5.7 开始,对于子查询的排序,其实是不生效的,意思就是下面这个子查询语句的排序,对于整体而言无效,所以最终得不到想要的结果

select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc

解决方式

方式一

还是上面的思路,只要加上一个 limit 就可以拿到想要的结果了,语句如下:

select *
from (
select *
from company_info
where company_name = 'xxxxx科技有限公司'
order by create_time desc
limit 1000
) t
group by t.department;

这个就算是在 mysql 5.7 及更高的版本也能跑,亲测可用。

至于 limit 后面的数字是 1000 还是 10000,可以根据具体的业务场景设置

方式二

联表查询,实现的语句如下:

select
	*
from
	(
	select
		department,
		max(create_time) as date_time
	from
		company_info
	where
		company_name = 'xxxxx科技有限公司'
	group by
		department
) a
left join company_info t 
on
	t.department = a.department
	and t.create_time = a.date_time;

使用 max 函数获取最新的 create_time 和 department,并分组,然后作为一张表 a 和原来的表 t 进行联查

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql备份的三种方式详解

    mysql备份的三种方式详解

    备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据。那变化之后的呢?所以制定一个好的备份策略很重要
    2013-09-09
  • MySQL GROUP BY分组取字段最大值的方法示例

    MySQL GROUP BY分组取字段最大值的方法示例

    本文介绍了如何使用MySQL的GROUPBY语句结合MAX函数来实现分组取字段最大值的操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • MySQL删除数据,表文件大小依然没变的原因

    MySQL删除数据,表文件大小依然没变的原因

    这篇文章主要介绍了MySQL删除数据,表文件大小依然没变的原因,帮助大家更好的理解MySQL中的数据表,感兴趣的朋友可以了解下
    2020-10-10
  • 在MySQL中实现基于时间点的数据恢复

    在MySQL中实现基于时间点的数据恢复

    在MySQL中实现基于时间点的数据恢复是一个复杂但可行的过程,主要依赖于MySQL的二进制日志(Binary Log),本文介绍了实现此功能的一般步骤,并有详细的代码供大家参考,需要的朋友可以参考下
    2024-03-03
  • mysql myisam 优化设置设置

    mysql myisam 优化设置设置

    mysql myisam 优化设置设置,需要的朋友可以参考下。
    2010-03-03
  • MySQL 原理与优化之Limit 查询优化

    MySQL 原理与优化之Limit 查询优化

    这篇文章主要介绍了MySQL 原理与优化之Limit 查询优化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL数据库如何克隆(带脚本)

    MySQL数据库如何克隆(带脚本)

    这篇文章主要介绍了MySQL数据库如何克隆(带脚本)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 解析mysql修改为utf8后仍然有乱码的问题

    解析mysql修改为utf8后仍然有乱码的问题

    本篇文章是对mysql修改为utf8后仍然有乱码的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • mySQL 延迟 查询主表

    mySQL 延迟 查询主表

    在主外键表存在关系的时候如果加上"lazy=true"的话,则表明延迟,即只查询主表中的内容,而不查询外键表中的内容。
    2009-09-09
  • mysql中find_in_set()函数用法及自定义增强函数详解

    mysql中find_in_set()函数用法及自定义增强函数详解

    这篇文章主要给大家介绍了关于mysql中find_in_set()函数用法及自定义增强函数的相关资料,在MySQL 数据库中进行复杂的查询语句,例如对多个字段进行筛选和排序,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06

最新评论