GROUP BY
と MAX(DATE)
を使用した SQL クエリ [重複した質問]
質問:
指定されたテーブルから最大出発時刻に基づいて各列車の最新の目的地を取得します。目的の出力では、最新の時刻を保持しながら、重複する宛先を除外する必要があります。
サンプルデータ:
<code>火车 目的地 时间 1 HK 10:00 1 SH 12:00 1 SZ 14:00 2 HK 13:00 2 SH 09:00 2 SZ 07:00</code>
期待される結果:
<code>火车 目的地 时间 1 SZ 14:00 2 HK 13:00</code>
最初の試行:
単純な GROUP BY
クエリと MAX(Time)
:
<code class="language-sql">SELECT Train, Dest, MAX(Time) FROM TrainTable GROUP BY Train</code>
エラー:
このクエリでは、Dest
列も GROUP BY
ステートメントに含める必要があることを示すエラー「ora-00979 not a GROUP BYexpression」が発生します。ただし、これにより各列車の行き先が重複してしまいます。
解決策:
望ましい結果を達成するには、より複雑なクエリを使用できます。
<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>
このクエリでは、まず RANK
関数を使用して、目的地ごとの各列車の順位を出発時刻の降順に計算します。 PARTITION BY train
句により、各トレイン グループ内でランキングが実行されることが保証されます。最後に、クエリは dest_rank
が 1 に等しいレコードのみを取得し、重複する目的地を効果的に除外し、各列車の最新の目的地のみを保持します。
以上がSQL の「GROUP BY」と「MAX(DATE)」を使用して各列車の最新の目的地を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。