解决mysql的Max函数根据时间分组查询最新的一条记录的问题(亲测有效)

解决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时间对上了,其他字段的数据也都一一对上了,在此详细记录一下这个小问题,免得以后遇上了不记得了,我确实发现一个问题学习爪哇的小伙伴的记性是不是都不太好 哈哈哈,希望能帮到大家!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页