MySQL クエリ: MAX() Group By
MySQL では、GROUP BY 句を使用して、指定された行内で同一の値を持つ行を結合します。 MAX() 関数はグループ内の指定された列の最大値を返します。 group.
問題ステートメント
次の列を持つテーブルが指定されています:
目標は、一意の各 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 サイトの他の関連記事を参照してください。