目的:查詢 category_id 分組下,最新id的 good_namephp
表結構及數據:goods表mysql
id category_id good_name 1 1 3OFUM5jU6w 2 1 2eAHE9yL8S 3 2 QBH6IP9mYg 4 3 fhrnLyFlyu 5 4 er7D2fVjcz 6 5 sY4p0tSmpB 7 6 KrUxx9uhSy 8 7 cLhlDJXoIS 9 8 YdvDIUeGtR 10 9 l23e1HyyIj 11 10 yJNNPXbWzt 12 1 2222222222
基礎查詢:sql
select max(id) cate_maxid from goods group by category_id
方案:取出最新紀錄後再聯合查詢【可行】spa
select t1.id, t1.good_name, t1.category_id from goods t1 join ( select max(id) cate_maxid, category_id from goods group by category_id ) as t2 on t1.id = t2.cate_maxid and t2.category_id = t1.category_id;
如下方案不可行。分組後只能取到其餘字段升序排序的第一條紀錄。code
方案一:只分組後取數據【不可行,分組未排序】排序
select id, good_name, category_id from goods group by category_id;
方案二:排序獲得結果集後再分組【不可行,分組對排序後結果集無效】rem
select t2.id, t2.good_name, t2.category_id from ( select * from goods order by id desc ) t2 GROUP BY t2.category_id;
方案三:與方案二雷同,排序獲得結果集後再聯合查詢並分組【不可行,分組對排序後結果集無效】get
select t1.id, t1.good_name, t1.category_id from goods t1 join ( select * from goods order by id desc ) as t2 on t1.id = t2.id group by t2.category_id;
方案四:與方案三雷同,不過調換排序結果集的位置【不可行 ,分組對排序後結果集無效】it
select t1.id, t1.good_name, t1.category_id from ( select * from goods order by id desc ) as t2 join goods t1 on t1.id = t2.id group by t2.category_id;
方案五:與方案二雷同,排序獲得的結果集放到 in 查詢中再分組【不可行 ,分組對排序後結果集無效】class
select t1.id, t1.good_name, t1.category_id from goods t1 where id in (select id from goods order by id desc) group by t1.category_id;
20200424 補充:在網上找到具體緣由的解釋了:實際是跟 mysql 版本有關: https://bugs.mysql.com/bug.php?id=80131