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

SQL の「GROUP BY」と「MAX(DATE)」を使用して各列車の最新の目的地を取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-22 07:37:11
オリジナル
595 人が閲覧しました

How to Get the Latest Destination for Each Train Using SQL's `GROUP BY` and `MAX(DATE)`?

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

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