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
 
 
  1. 查询每个分组中时间最新的那条记录的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)
 
 
 

猜你喜欢

转载自www.cnblogs.com/wang-yaz/p/10685313.html