在 MySQL 中擷取每個群組的最後一行
在 MySQL 中使用「group by」收集每組的「最後」行,考慮以下有效的方法:
子查詢方法:
一常見的方法是使用子查詢:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
連接方法:
另一種方法是使用連接:
SELECT t1.* FROM foo t1 JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2 ON t1.id = t2.id AND t1.uid = t2.uid;
左連接方法:
更細緻的方法:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
比較查詢
您可以使用EXPLAIN 分析這些查詢的效率語句。
表格結構與資料:
CREATE TABLE foo ( id INT(10) NOT NULL AUTO_INCREMENT, uid INT(10) NOT NULL, value VARCHAR(50) NOT NULL, PRIMARY KEY (`id`), INDEX `uid` (`uid`) ); id, uid, value 1, 1, hello 2, 2, cheese 3, 2, pickle 4, 1, world
預期結果:
id, uid, value 3, 2, pickle 4, 1, world
以上是如何有效率地檢索MySQL中每個群組的最後一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!