取出分组后最新的一条数据的坑

今天群里有个小伙伴提了个需求说帮写一条取出分组后最新的一条数据的sql:

1
2
3
4
5
6
7
8
9
10
11
12
一开始我直接就上sql:
select * from (select * from a order by a.id desc) t group by id
结果找到的数据老不对,后面查阅资源发现,在mysql5.7后 优化器默认过滤了查询的order by 效果,
所以找到的数据不对劲,但是sql变成:
select * from (select * from a order by a.id desc limit 9999) t group by id
却又可以了。


后来只能用另外一种方法解决了,子查询加inner join 示例:
select * from product INNER JOIN
(select max(id) max_id from product group by price) as t
on t.max_id = product.id order by id desc

最后问题解决~~