问题:
找到一种更有效的方法来检索MySQL 表中每个组的最后一行,使用类似于以下的查询:
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 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
说明:
此查询 Left 根据 ID 列将表中的每一行与其后继行连接起来。如果不存在后继(即,它是组中的最后一行),则 t2.id 列将为 NULL。通过过滤 NULL,我们有效地隔离了每组的最后一行。
附加说明:
使用 EXPLAIN 分析原始查询和替代查询的查询性能解决方案。
此方法对于大型数据集和复杂分组特别有用。对于更简单的情况,其他方法可能更有效。
以上是如何高效地检索 MySQL 中每组的最后一行?的详细内容。更多信息请关注PHP中文网其他相关文章!