ホームページ  >  記事  >  データベース  >  MySQL の GROUP BY 句で各 ID の最高バージョン レコードを取得するにはどうすればよいですか?

MySQL の GROUP BY 句で各 ID の最高バージョン レコードを取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-21 00:06:17626ブラウズ

How to Retrieve the Highest Version Record for Each ID in MySQL's GROUP BY Clause?

MySQL グループで返される行を制御する

MySQL では、データのグループから目的の行を取得することが困難になる場合があります。この記事では、シナリオごとにグループで返される行の制御を確立する方法について説明します。

問題:

データベース テーブルに、id 列で識別されるレコードの複数のバージョンが含まれています。そして version_id 列。目標は、テーブルをクエリして、一意の ID ごとに最も高い version_id を持つレコードのみを返すことです。

解決策 1 (サブクエリ アプローチ):

1 つのアプローチでは、以下を使用します。 version_id に基づいて行を降順にランク付けするサブクエリ:

SELECT *
FROM (SELECT * FROM table ORDER BY version_id DESC) t1
GROUP BY t1.id

このメソッドは効果的に一時テーブルを作成し、データを並べ替えて、それをグループ化して目的の行を取得します。

解決策 2 (Max と Join を使用):

別の方法では MAX() 関数を利用し、同じ結果を得るために結合します:

SELECT *
FROM (SELECT id, MAX(version_id) AS version_id FROM table GROUP BY id) t1
INNER JOIN table t2 ON t2.id = t1.id AND t1.version_id = t2.version_id

このアプローチが最初です各 ID の最大 version_id を識別し、元のテーブルを結合して、最高バージョンの完全なレコードを取得します。

利点と考慮事項:

サブクエリ アプローチでは、メモリ内の一時テーブル。大規模なデータセットのパフォーマンスに影響を与える可能性があります。一方、理解と実装はより簡単です。

結合ベースの方法は、一時テーブルの作成を避けるため、大規模なデータセットに対しては一般に効率的です。ただし、最適なパフォーマンスを得るには、(id, version_id) 列にインデックスが存在することが前提となります。

どちらのソリューションも、効率的に実行するには適切なインデックスが必要です。

以上がMySQL の GROUP BY 句で各 ID の最高バージョン レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。