最近需要查询每组时间最新的记录
表如下:
目标结果是:
一开始的想法:
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)