質問:
最新の行の PID を取得するにはどうすればよいですか? MAX() と GROUP を組み合わせた MySQL クエリを使用して、テーブル内の各 RID に対してBY?
サンプル データ:
CREATE TABLE theTable ( `pid` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `cost` INT UNSIGNED NOT NULL, `rid` INT NOT NULL, ) Engine=InnoDB; INSERT INTO theTable (`pid`, `timestamp`, `cost`, `rid`) VALUES (1, '2011-04-14 01:05:07', 1122, 1), (2, '2011-04-14 00:05:07', 2233, 1), (3, '2011-04-14 01:05:41', 4455, 2), (4, '2011-04-14 01:01:11', 5566, 2), (5, '2011-04-14 01:06:06', 345, 1), (6, '2011-04-13 22:06:06', 543, 2), (7, '2011-04-14 01:14:14', 5435, 3), (8, '2011-04-14 01:10:13', 6767, 3) ;
望ましい結果:
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 の最初に出現した PID を返します。
正しいクエリ:
各 RID の最新行の PID を取得するには、次のコマンドを使用できます。 query:
SELECT pid, MAX(timestamp) AS latest_timestamp, rid FROM theTable GROUP BY rid HAVING latest_timestamp = MAX(timestamp)
このクエリは、最初に GROUP BY 句を使用して、RID 列ごとに行をグループ化します。次に、MAX() 関数を使用して、行の各グループの最大タイムスタンプを計算します。最後に、HAVING 句を使用して結果をフィルタリングし、各 RID の最新のタイムスタンプを持つ行のみを保持します。
以上がMAX() と GROUP BY を使用して MySQL で各 RID の最新の PID を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。