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

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

Barbara Streisand
リリース: 2025-01-22 07:22:08
オリジナル
323 人が閲覧しました

How to Retrieve the Latest Record for Each Group Using SQL's GROUP BY and MAX(DATE)?

GROUP BY および MAX(DATE) を使用したグループ [重複]

SQL では、特定の列に基づいて最新のレコードを抽出し、別の列でグループ化する必要がある状況に遭遇することがあります。たとえば、テーブル内の各列車の最新の目的地を決定する必要がある場合があります。

MAX(時間)ごとにグループ化

最初は、単純な GROUP BY ステートメントと MAX(Time) を使用してこれを実現しようとしましたが、エラーが発生しました。これは、GROUP BY ステートメントでは非グループ化列を集計できないためです。この問題を解決するには、group by ステートメントに「Dest」を含める必要があります。ただし、これでは期待した結果が得られません。

サブクエリとRANK関数を使用する

この解決策には、サブクエリと RANK() 関数の使用が含まれます。サブクエリは、出発時刻に基づいて各目的地のランキングを計算する中間テーブルを作成します。 RANK() 関数は時間に基づいてランキングを割り当て、各トレインの最大値 (最新の時間) にランク 1 が割り当てられます。

最後のクエリは、dest_rank が 1 であるサブクエリから列車、目的地、時刻を選択します。これにより、各列車の最新の目的地のみが取得されるようになります。

以下は更新された SQL クエリです:

<code class="language-sql">SELECT train, dest, time
FROM (
  SELECT train, dest, time,
    RANK() OVER (PARTITION BY train ORDER BY time DESC) dest_rank
    FROM traintable
  )
where dest_rank = 1;</code>
ログイン後にコピー

このクエリは望ましい結果を生成します:

火车 目的地 时间
1 SZ 14:00
2 HK 13:00

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

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