踩坑ing
逻辑-1
肯定会认为,先分组,后排序,乃是正常流程,要相信mysql 能得到想要的数据
select * from table where .... group by column_name order by id DESC;
以上会发现,返回数据是从小到大的数据,不符合自己的预期,pass
逻辑-2
再上面的逻辑尝试了下,并不能达到结果
尝试下一种逻辑:
使用子查询,达到先排序,后分组的逻辑,要相信mysql 能返回我要的数据
select * from (select * from table where .... order by id DESC) r group by r.column;
这时候,奇迹发生了,有的服务器会返回正常的数据结果,但是有的服务器会返回逻辑-1 的结果。不符合自己的预期,pass
逻辑-3
通过查询资料,mysql 会对子查询进行优化,所以数据并不是准确的。
select * from (select * from table where .... order by id DESC limit 9999) r group by r.column;
通过 limit 语句限制,mysql 不要进行优化,则可以正常返回数据,但是加了limit 看着不舒服,
逻辑-4
虽然逻辑-3可以完成条件,但是limit 9999 还是限制数据,只能换一种方法
使用 MAX 进行强制获取最大的 id,再通过id ,进行数据获取
select * from table where id in (select max(column) from table where ... group by column)
这样就可以成功返回数据了