解决mysql的Max函数根据时间分组查询最新的一条记录的问题(亲测有效)
程序员文章站
2024-03-25 13:35:04
...
解决mysql的Max函数根据时间分组查询最新的一条记录的问题(亲测有效)
今天调整一个查询的sql 根据条件只查询时间最新一条的记录 想着直接用max函数直接就改了 简单的一批呀 没想到后来发现数据出了错误 直接上sql.
// An highlighted block
SELECT
MAX( med.create_time ),
med.create_time,
med.id,
med.source_name,
med.related_id,
med.media_url,
med.user_id,
med.sort,
med.introduce,
med.is_use,
med.update_time,
p.`name`,
p.mobile
FROM
media_source med
LEFT JOIN participant p ON med.user_id = p.user_id
GROUP BY
med.user_id
sql查询结果:
结果是出来了而且sql也不会报错,问题就出在数据上了,看到截图上蓝色标记首先第一反应就是为啥同一条记录的创建时间不一样?
原因出在这个条sql是根据user_id进行分组查询,分组查询结果中有三条记录,用Max()函数取得离现在时间最新的一条记录,确实是成功的取到了,但是取到的字段只是被max()包裹的字段,剩下的字段并没有按照取到的字段一一对应上,所以问题就来了,百度一下马上回来。
看到很多爪哇小伙伴碰到这个问题,但是确实没有说明白这个问题也没有实际测试过,最后看到一个大哥的文章中提到这一点,于是我借鉴了他说的方式,解决了这个小问题。
大哥的链接(点击去看看大哥的): link.
经过修改的sql:
SELECT
med.id,
med.source_name,
med.related_id,
med.media_url,
med.user_id,
med.sort,
med.introduce,
med.is_use,
med.create_time,
med.update_time,
p.`name`,
p.mobile
FROM
media_source med,
(
SELECT
max( create_time ) AS ct,
id,
source_name,
related_id,
media_url,
user_id,
sort,
introduce,
is_use,
create_time,
update_time
FROM
media_source
GROUP BY
user_id
) med2 ,
participant p
WHERE
med.user_id = med2.user_id
AND med.create_time = med2.ct
and med.user_id = p.user_id
GROUP BY med.user_id
修改后sql查询结果:
修改后的sql时间对上了,其他字段的数据也都一一对上了,在此详细记录一下这个小问题,免得以后遇上了不记得了,我确实发现一个问题学习爪哇的小伙伴的记性是不是都不太好 哈哈哈,希望能帮到大家!
上一篇: Python内置函数 max 详解
下一篇: Docker详细安装Tomcat