**前言:**经常遇到需要对数据进行分组并取组内最新一条数据的需求,这边总结了3种方法。
需求:
查询业务流程明细表中每个业务流程最新明细信息
实现:
mysql 5.6可以这样:

select t.* from (
select * from biz_flow_task order by update_time desc 
) t group by t.flow_uid

5.7以后对子查询排序做了优化,子查询全表排序失效,网上很多是在排序后面加limit的,这样感觉很不好,数据量大会丢数据,建议可以这样:
方式一:

select t.* from (
select * from biz_flow_task having 1 order by update_time desc 
) t group by t.flow_uid

方式二:

select t.* from biz_flow_task t
join (
select flow_uid,max(update_time) as update_time from biz_flow_task group by flow_uid,update_time 
) tt on t.flow_uid = tt.flow_uid and t.update_time = tt.update_time
group by tt.flow_uid
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐