Mysql 分组查询取max 那条记录其他字段

需求描述:

现有有需求要按类型分组,查询出每一分组最近的一条记录,返回字段包含id,定时任务执行时间(start_time)和任务id(job_id)。

SELECT id, MAX(start_time) AS startTime,job_id AS jobId FROM `sta_task_alarm` GROUP BY `job_id`;

问题描述:上面这个SQL查询出来的id 并不是我们想要的max 那条记录的id,那么我们怎么查询到

MAX(start_time) 那条对应的 id和job_id(这个上面可以查询出来)呢?

想到用 GROUP_CONCAT 函数去实现:

SELECT SUBSTRING_INDEX( GROUP_CONCAT(id ORDER BY `id` DESC),,,1) AS id,job_id AS jobId
SUBSTRING_INDEX( GROUP_CONCAT(start_time ORDER BY `start_time` DESC),,,1) AS startTime 
FROM `sta_task_alarm` GROUP BY job_id;

这样是可以实现,查询出的结果为:

这个结果是正确的。验证一下原始数据:

最后:

其实因为id是自增的,按下面这样查就可以了:

SELECT MAX(id) AS id, job_id AS jobId, MAX(start_time) AS startTime	
	FROM `sta_task_alarm` WHERE is_delete = 0 GROUP BY job_id;

执行结果:

经验分享 程序员 微信小程序 职场和发展