Question :
Comment récupérer le PID de la dernière ligne pour chaque RID d'une table à l'aide d'une requête MySQL qui combine MAX() et GROUP BY ?
Exemple Données :
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) ;
Résultat souhaité :
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
Requête incorrecte :
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
Cette requête renverrait le PID de la première occurrence de chaque RID, et non le last.
Requête correcte :
Pour récupérer le PID de la dernière ligne pour chaque RID, vous pouvez utiliser la requête suivante :
SELECT pid, MAX(timestamp) AS latest_timestamp, rid FROM theTable GROUP BY rid HAVING latest_timestamp = MAX(timestamp)
Cette requête utilise d'abord la clause GROUP BY pour regrouper les lignes par colonne RID. Il utilise ensuite la fonction MAX() pour calculer l'horodatage maximum pour chaque groupe de lignes. Enfin, il filtre les résultats à l'aide de la clause HAVING pour conserver uniquement les lignes avec le dernier horodatage pour chaque RID.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!