SELECT *
FROM (SELECT * FROM project_record order by on_project_time desc) t
GROUP BY project_id;
查询结果错误:
结果看似正确的,实则是错误的。每个项目最大的上项目时间能正确查出,但是数据对应的id不正确。
分析发现,对于每一个分组,分组后的结果总是取组中主键(id)最小的数据,即group by project_id 总会对project_id执行排序(正序)
而不论临时表(t)中是否已排序,都会取组中主键id最小的一行数据。换句话说 临时表t 内的排序 无法影响外层的group by 的操作。
4、 正确方法如下:
SELECT t1.*
FROM project_record t1
INNER JOIN (
SELECT DISTINCT(id) id
FROM project_record
ORDER BY on_project_time DESC) AS t2 ON t2.id = t1.id
GROUP BY t1.project_id;
select t1.*
FROM project_record t1
INNER JOIN (SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY on_project_time DESC),',',1) AS id
FROM project_record GROUP BY project_id) AS t2 ON t2.id = t1.id;
查询结果正确:
SUBSTRING_INDEX 用法:取排序后的分组的第一条数据。
本人习惯使用第一种方法。
到此这篇关于mysql通过group by分组取最大时间对应数据的两种有效方法的文章就介绍到这了,更多相关mysql group by分组取对应数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!