group by查询每组时间最新的一条记录
最近需要查询每组时间最新的记录
表如下:

目标结果是:

一开始的想法:
select * from
(select * from log where account_id = 45 order by shop_id,create_time desc) w
group by w.shop_id
这种写法看着没毛病,但是查询出来不是每组最新的一条
正确的写法很多这里说个认为比较简单的
select * from log where id in
(select SUBSTRING_INDEX(GROUP_CONCAT(id order by create_time desc), ',', 1) from log where account_id = 45 group by shop_id)
分部解读:
根据条件查询出分组的所有按时间降序的记录id并拼接
1.select GROUP_CONCAT(id order by create_time desc) from log where account_id = 45 group by shop_id

- 查询每个分组中时间最新的那条记录的id
select SUBSTRING_INDEX(GROUP_CONCAT(id order by create_time desc), ',', 1) from log where account_id = 45 group by shop_id

3.
select * from log where id in
(select SUBSTRING_INDEX(GROUP_CONCAT(id order by create_time desc), ',', 1) from log where account_id = 45 group by shop_id)

hello world!!!

浙公网安备 33010602011771号