リレーショナル データベースでは、グループごとに特定の列の最大値を持つ行を取得する必要がある場合があります。これは、グループごとの最大値の選択として知られています。 MySQL では、これを実現するためのアプローチがいくつかあります。
効率的な方法の 1 つは、サブクエリを使用することです。
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;
このクエリは、最大バージョン ID を計算します。 MAX() over() ウィンドウ関数を使用して各 ID を取得し、一致するバージョン ID を持つ行を選択します。
以上がMySQL でグループごとの最大値を選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。