ホームページ > データベース > mysql チュートリアル > MAX() と GROUP BY を使用して MySQL で一意の RID ごとに最新の行の PID を取得するにはどうすればよいですか?

MAX() と GROUP BY を使用して MySQL で一意の RID ごとに最新の行の PID を取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-31 01:29:12
オリジナル
453 人が閲覧しました

How to Retrieve the PID of the Latest Row for Each Unique RID in MySQL Using MAX() and GROUP BY?

MySQL クエリ: MAX() Group By

MySQL では、GROUP BY 句を使用して、指定された行内で同一の値を持つ行を結合します。 MAX() 関数はグループ内の指定された列の最大値を返します。 group.

問題ステートメント

次の列を持つテーブルが指定されています:

  • pid (自動インクリメント主キー)
  • タイムスタンプ (デフォルト値のタイムスタンプ)
  • コスト(整数)
  • rid (整数)

目標は、一意の各 Rid の最新の行の PID を取得することです。予期される出力は次のようになります:

pid MAX(timestamp) rid
5 2011-04-14 01:06:06 1
3 2011-04-14 01:05:41 2
7 2011-04-14 01:14:14 3

初期クエリ

問題を解決するために次のクエリが試行されました:

SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
ログイン後にコピー

ただし、このクエリは、最新の Rid 値ではなく最初に出現した Rid 値の PID を選択したため、誤った PID を返しました。

ソリューション クエリ

必要な結果を取得するには、次のクエリを使用できます。

SELECT pid, MAX(timestamp), rid
FROM (
    SELECT pid, timestamp, rid,
        ROW_NUMBER() OVER (PARTITION BY rid ORDER BY timestamp DESC) AS rn
    FROM theTable
) AS subquery
WHERE rn = 1
GROUP BY rid
ログイン後にコピー

説明

このクエリはサブクエリを使用して、各 Rid の行をランク付けします。 ROW_NUMBER() 関数を使用してタイムスタンプの降順に並べ替えます。 rn 列は各行にランクを割り当てます。1 は各 Rid の最新のタイムスタンプを持つ行を表します。

次に、外側のクエリは結果をフィルターして、rn が 1 に等しい行のみを含めるようにします。各 Rid の最新の行が選択されます。 pid、MAX(timestamp)、rid の値は、rid によってグループ化され、目的の出力が生成されます。

以上がMAX() と GROUP BY を使用して MySQL で一意の RID ごとに最新の行の PID を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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