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

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

DDD
发布: 2024-12-24 12:41:11
原创
217 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板