1、类似于QQ聊天,打开软件要求显示最新的回复消息,正常思维是先总体分组(group by)然后再对每个小分组进行排序(order by)
SQL:
SELECT t.* FROM (SELECT * FROM private_letter p WHERE belong_id = 123456 ORDER BY create_time DESC) t GROUP BY t.session_id;
结果显示还是默认
经查阅资料发现,mysql 5.6以上版本对子查询中的排序进行优化,是不会执行的。
解决办法:在子查询中加入 limit 关键字即可解决,
成功解决后是这样的:
SQL:
SELECT t.* FROM ( SELECT * FROM private_letter p WHERE belong_id = 123456 ORDER BY create_time DESC LIMIT 10) t GROUP BY t.session_id;
至此,成功解决子查询中排序的问题!