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

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

Patricia Arquette
リリース: 2024-11-21 00:06:17
オリジナル
696 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート