Considérez un scénario dans lequel vous disposez d'une table MySQL avec des colonnes telles que l'horodatage, le coût, le débarras, etc. . Votre objectif est de récupérer le pid de la dernière ligne pour chaque débarras unique.
Vous avez tenté cela en utilisant ce qui suit. requête :
SELECT MAX(timestamp),rid,pid FROM theTable GROUP BY rid
Cependant, les valeurs pid renvoyées n'étaient pas alignées sur les horodatages maximum. En effet, GROUP BY considère toutes les colonnes de la clause SELECT et sélectionne la première ligne correspondante pour chaque groupe.
Pour remédier à cela, nous devons identifier le débarras et l'horodatage maximum pour chaque groupe. Nous pouvons le faire en utilisant une sous-requête :
SELECT rid, MAX(timestamp) AS ts FROM theTable GROUP BY rid
Le résultat de cette requête ressemblera à ceci :
rid | ts -----|----- 1 | 2011-04-14 01:06:06 2 | 2011-04-14 01:05:41 3 | 2011-04-14 01:14:14
Maintenant, nous pouvons joindre la table d'origine avec cette sous-requête, en utilisant rid et l'horodatage, pour récupérer les valeurs pid souhaitées :
SELECT theTable.pid, theTable.cost, theTable.timestamp, theTable.rid FROM theTable INNER JOIN ( SELECT rid, MAX(timestamp) AS ts FROM theTable GROUP BY rid ) AS maxt ON (theTable.rid = maxt.rid AND theTable.timestamp = maxt.ts)
Le résultat de cette requête vous fournira le pid, le coût, l'horodatage et débarrassé de la dernière ligne pour chaque débarras unique.
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!