在关系数据库中,有时您需要检索每个组的特定列的最大值的行。这称为选择分组最大值。在 MySQL 中,有多种方法可以实现此目的。
一种有效的方法是使用子查询:
SELECT * FROM ( SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id ) AS t1 INNER JOIN table AS t2 ON t2.id = t1.id AND t1.version_id = t2.version_id;
此子查询创建一个表每个 ID 的最大版本 ID,然后将其与原始表连接以检索相应的行。它相对高效,并且假设 (id, version_id) 列上存在索引。
或者,您可以使用聚合和排名函数:
SELECT id, version_id, field1, field2 FROM ( SELECT id, version_id, field1, field2, RANK() OVER (PARTITION BY id ORDER BY version_id DESC) AS ranking FROM table ) AS ranked_table WHERE ranking = 1;
此查询按照 version_id 的降序对每个 ID 的行进行排名,并选择排名为 1 的行,从而有效地过滤最大值
窗口函数也可用于此目的:
SELECT id, version_id, field1, field2 FROM ( SELECT id, version_id, field1, field2, MAX(version_id) OVER (PARTITION BY id) AS max_version_id FROM table ) AS windowed_table WHERE version_id = max_version_id;
此查询使用 MAX() 计算每个 ID 的最大版本 ID over() 窗口函数并选择具有匹配版本 ID 的行。
以上是如何在 MySQL 中选择 Group-Wise 最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!