问题:
如何检索最新行的 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中文网其他相关文章!