在 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中文网其他相关文章!