错误随笔记

mysql  问题

1、先排序后分组的问题,order by , group by

参考文档:https://blog.csdn.net/lglaljj123/article/details/79864188

一般写法为: select tmp.* from (select * from table_name order by addtime desc)tmp group by tmp.id;

存在问题:5.7以上版本的MySql在执行这条sql时缺少了一个derived操作,通过查阅相关资料了解到MySql 5.7对子查询进行了优化,认为子查询中的order by可以进行忽略;

解决方案:1、以上sql在5.7版本以下可以使用

     2、select tmp.* from (select * from table_name order by addtime desc limit 999999)tmp group by tmp.id;

       3、select * from table_name a where N > (select count(*) from table_name b where b.id= a.id and a.addtime< b.addtime) order by a.id,a.addtime desc;

方法二中使用limit,需要limit的范围足够大能包括所有数据,并且每种分类只会显示一条数据,但是数据较多时运行效率要比方法三快上很多,方法三能够控制每种分类显示多少条数据,把N换成需要显示对应的数字即可

 

posted @ 2019-03-14 09:19  xzzhen  阅读(175)  评论(0)    收藏  举报