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