ホームページ > データベース > mysql チュートリアル > SQL の GROUP BY 句を使用して各グループから最新のレコードを取得するにはどうすればよいですか?

SQL の GROUP BY 句を使用して各グループから最新のレコードを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-02 18:23:39
オリジナル
391 人が閲覧しました

How to Retrieve the Latest Record from Each Group Using SQL's GROUP BY Clause?

GROUP BY を使用したグループからの最新レコードの取得

SQL では、GROUP BY 句はテーブルのデータをグループ化し集計するためによく使用されます。 。ただし、特定のシナリオでは、各グループから最も古いレコードではなく最新のレコードを取得する必要が生じる場合があります。

次の例を考えてみましょう。

SELECT * FROM messages GROUP BY from_id
ログイン後にコピー

このクエリはグループ化を目的としていますが、 from_id 列に基づいてレコードを作成する場合、タイムスタンプの順序付け基準がないため、各グループから最も古いメッセージが選択されます。代わりに最新のメッセージを取得するには、クエリを次のように変更する必要があります:

SELECT t1.*
FROM messages t1
JOIN (
    SELECT from_id, MAX(timestamp) AS latest_timestamp
    FROM messages
    GROUP BY from_id
) t2 ON t1.from_id = t2.from_id AND t1.timestamp = t2.latest_timestamp
ログイン後にコピー

この最適化されたクエリでは、サブクエリを利用して各グループ内の最新のタイムスタンプ値を識別します。サブクエリは、各 from_id の最大タイムスタンプ値を計算し、latest_timestamp として保存します。

その後、メイン クエリは元のテーブル (メッセージ) をサブクエリ テーブルと結合し、from_id に基づいてレコードを照合します。さらに、元のテーブルのタイムスタンプ (t1.timestamp) が各グループの最新のタイムスタンプ (t2.latest_timestamp) に対応していることが保証されます。

この洗練されたクエリは、各ユーザーからの最新のメッセージを効果的に取得します。望ましい結果が得られます。

以上がSQL の GROUP BY 句を使用して各グループから最新のレコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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