在關聯式資料庫中,有時您需要擷取每個群組的特定欄位的最大值的行。這稱為選擇分組最大值。在 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中文網其他相關文章!