最近有个需求,获取某个字段group by后最新记录,尝试了很多方法,最后找到一个解决方案如下:
SELECT
SUBSTRING_INDEX(group_concat(id order by `create_time` desc),',',1) AS id,
SUBSTRING_INDEX(group_concat(barcode order by `create_time` desc),',',1) AS barcode ,
SUBSTRING_INDEX(group_concat(comparison_task_id order by `create_time` desc),',',1) AS comparison_task_id
FROM
t_price_comparison_task_detail pctd
WHERE
pctd.is_deleted = 0
AND barcode IN ('4901872073696' )
GROUP BY barcode
这种方法是复杂度最低,执行效率最高的,很多方法都是通过MAX(id),然后嵌套外部查询查找最新的记录,那样外部查询不能走
索引,如果数据量很大的话,会导致慢查询,上面的方法不用嵌套查询就能直接拿出最大记录的相关字段,很方便。