【mysql】分组后排序失效

2022-05-27 13:54:06 浏览数 (1)

今天写了一个sql,主要目的是查询分组后最新的一条数据,原本的关系是1对多,想通过分组后实现1对1的逻辑关系,而且要保证分组后的数据是按照创建时间排序,确保是最新的一条。

一、前提

mysql实现排序后分组的第一条数据是最新的。

mysql5.7版本默认分组后不是最新的1条数据,需要通过limit实现。

二、解决方案一

解决办法:

一般都会通过连接查询 子查询实现,但是我们这里要加上limit关键字,即可实现分组后的1条数据是最新的1条。

  • 先子查询 排序 加 limit (此时limit 一定要尽可能的大 , 否则数据达到一定程度后查询不到数据
  • 再进行分组查询
代码语言:javascript复制
SELECT
	space_id,
	max_temp,
	min_temp,
	avg_temp,
	create_time 
FROM
	( SELECT space_id, max_temp, min_temp, avg_temp, create_time FROM t_data_history ORDER BY create_time DESC ) a 
GROUP BY
	a.space_id

排序未生效

11

排序生效

代码语言:javascript复制
SELECT
	space_id,
	max_temp,
	min_temp,
	avg_temp,
	create_time 
FROM
	( SELECT space_id, max_temp, min_temp, avg_temp, create_time FROM t_data_history ORDER BY create_time DESC LIMIT 9999 ) a 
GROUP BY
	a.space_id

控制台数据

22

完!

有其他的解决方案会更新此文章。

参考文章:

https://blog.csdn.net/yesmysql/article/details/118611786


腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!

0 人点赞