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

如何使用 MAX() 和 GROUP BY 检索 MySQL 中每个唯一 RID 的最新行的 PID?

Patricia Arquette
Patricia Arquette原创
2024-12-31 01:29:12461浏览

How to Retrieve the PID of the Latest Row for Each Unique RID in MySQL Using MAX() and GROUP BY?

MySQL 查询:MAX() Group By

在 MySQL 中,GROUP BY 子句用于将指定中具有相同值的行组合在一起组,而 MAX() 函数返回给定列中的最大值

问题陈述

给定一个包含以下列的表:

  • pid(自增主键)
  • 时间戳(默认值的时间戳)
  • 成本(整数)
  • rid (整数)

目标是为每个唯一的 Rid 检索最新行的 PID。预期输出应为:

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

但是,该查询返回了不正确的 PID,因为它选择了第一次出现的 rod 值而不是最新的 PID

解决方案查询

要获得所需的结果,可以使用以下查询:

SELECT pid, MAX(timestamp), rid
FROM (
    SELECT pid, timestamp, rid,
        ROW_NUMBER() OVER (PARTITION BY rid ORDER BY timestamp DESC) AS rn
    FROM theTable
) AS subquery
WHERE rn = 1
GROUP BY rid

说明

此查询使用子查询对每个 Rid 的行按降序排列使用 ROW_NUMBER() 函数的时间戳。 rn 列为每一行分配一个排名,其中 1 表示每个 Rid 具有最新时间戳的行。

然后外部查询过滤结果以仅包含 rn 等于 1 的行,确保只有选择每个 Rid 的最新行。 pid、MAX(timestamp) 和rid 值按rid 分组以产生所需的输出。

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

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