首页 >数据库 >mysql教程 >如何高效地检索MySQL中每个组的最后一行?

如何高效地检索MySQL中每个组的最后一行?

DDD
DDD原创
2024-12-24 12:41:11177浏览

How to Efficiently Retrieve the Last Row for Each Group in MySQL?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn