今天写了一个sql,主要目的是查询分组后最新的一条数据,原本的关系是1对多,想通过分组后实现1对1的逻辑关系,而且要保证分组后的数据是按照创建时间排序,确保是最新的一条。
一、前提
mysql实现排序后分组的第一条数据是最新的。
mysql5.7版本默认分组后不是最新的1条数据,需要通过limit实现。
二、解决方案一
解决办法:
一般都会通过连接查询 子查询实现,但是我们这里要加上limit关键字,即可实现分组后的1条数据是最新的1条。
- 先子查询 排序 加 limit (此时limit 一定要尽可能的大 , 否则数据达到一定程度后查询不到数据)
- 再进行分组查询
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
排序未生效
排序生效
代码语言: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
控制台数据
完!
有其他的解决方案会更新此文章。
参考文章:
https://blog.csdn.net/yesmysql/article/details/118611786
腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧!