Maison >base de données >tutoriel mysql >Comment obtenir le dernier PID pour chaque RID dans MySQL à l'aide de MAX() et GROUP BY ?

Comment obtenir le dernier PID pour chaque RID dans MySQL à l'aide de MAX() et GROUP BY ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 02:02:09566parcourir

How to Get the Latest PID for Each RID in MySQL Using MAX() and GROUP BY?

Requête MySQL : MAX() GROUP BY

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn