MySQL 查询:MAX() Group By
在 MySQL 中,GROUP BY 子句用于将指定中具有相同值的行组合在一起组,而 MAX() 函数返回给定列中的最大值
问题陈述
给定一个包含以下列的表:
目标是为每个唯一的 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中文网其他相关文章!