首页 > 数据库 > mysql教程 > 如何使用 MAX() 和 GROUP BY 获取 MySQL 中每个 RID 的最新 PID?

如何使用 MAX() 和 GROUP BY 获取 MySQL 中每个 RID 的最新 PID?

Mary-Kate Olsen
发布: 2024-12-30 02:02:09
原创
548 人浏览过

How to Get the Latest PID for Each RID in MySQL Using MAX() and GROUP BY?

MySQL 查询:MAX() GROUP BY

问题:

如何检索最新行的 PID使用结合了 MAX() 和 GROUP 的 MySQL 查询对表中的每个 RID BY?

示例数据:

CREATE TABLE theTable (
    `pid` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `cost` INT UNSIGNED NOT NULL,
    `rid` INT NOT NULL,
) Engine=InnoDB;

INSERT INTO theTable (`pid`, `timestamp`, `cost`, `rid`)
VALUES
  (1, '2011-04-14 01:05:07', 1122, 1),
  (2, '2011-04-14 00:05:07', 2233, 1),
  (3, '2011-04-14 01:05:41', 4455, 2),
  (4, '2011-04-14 01:01:11', 5566, 2),
  (5, '2011-04-14 01:06:06', 345, 1),
  (6, '2011-04-13 22:06:06', 543, 2),
  (7, '2011-04-14 01:14:14', 5435, 3),
  (8, '2011-04-14 01:10:13', 6767, 3)
;
登录后复制

期望结果:

pid | MAX(timestamp)      | rid
-----------------------------------
5   | 2011-04-14 01:06:06 | 1
3   | 2011-04-14 01:05:41 | 2
7   | 2011-04-14 01:14:14 | 3
登录后复制

不正确查询:

SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
登录后复制

此查询将返回每个 RID 第一次出现的 PID,而不是最新的。

正确查询:

要检索每个 RID 的最新行的 PID,可以使用以下命令查询:

SELECT pid, MAX(timestamp) AS latest_timestamp, rid
FROM theTable
GROUP BY rid
HAVING latest_timestamp = MAX(timestamp)
登录后复制

此查询首先使用 GROUP BY 子句按 RID 列对行进行分组。然后,它使用 MAX() 函数计算每组行的最大时间戳。最后,它使用 HAVING 子句过滤结果,仅保留每个 RID 具有最新时间戳的行。

以上是如何使用 MAX() 和 GROUP BY 获取 MySQL 中每个 RID 的最新 PID?的详细内容。更多信息请关注PHP中文网其他相关文章!

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