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 ?

Comment récupérer le PID de la dernière ligne pour chaque RID unique dans MySQL à l'aide de MAX() et GROUP BY ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-31 01:29:12461parcourir

How to Retrieve the PID of the Latest Row for Each Unique RID in MySQL Using MAX() and 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 :

  • pid (clé primaire à incrémentation automatique)
  • horodatage (horodatage avec valeur par défaut)
  • coût (entier)
  • débarrassé (entier)

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!

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