Maison >base de données >tutoriel mysql >Comment récupérer le PID de la dernière ligne pour chaque RID unique dans MySQL à l'aide de MAX() et GROUP BY ?
Requête MySQL : MAX() Group By
Dans MySQL, la clause GROUP BY est utilisée pour combiner des lignes avec des valeurs identiques dans un groupe, tandis que la fonction MAX() renvoie la valeur maximale dans une colonne donnée au sein d'un groupe.
Problème Déclaration
Étant donné un tableau avec les colonnes suivantes :
Le but est de récupérer le PID de la dernière ligne pour chaque débarras unique. Le résultat attendu devrait être :
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 initiale
La requête suivante a été tentée pour résoudre le problème :
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
Cependant, cette requête a renvoyé des PID incorrects, car elle a sélectionné les PID des premières occurrences de valeurs rid au lieu des dernières horodatages.
Requête de solution
Pour obtenir les résultats souhaités, la requête suivante peut être utilisée :
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
Explication
Cette requête utilise une sous-requête pour classer les lignes de chaque débarras par ordre décroissant d'horodatage en utilisant la fonction ROW_NUMBER(). La colonne rn attribue un rang à chaque ligne, où 1 représente la ligne avec le dernier horodatage pour chaque rid.
La requête externe filtre ensuite les résultats pour inclure uniquement les lignes avec rn égal à 1, garantissant que seul le la dernière ligne de chaque débarras est sélectionnée. Les valeurs pid, MAX (horodatage) et rid sont regroupées par rid pour produire le résultat souhaité.
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!