Exemple avec une table TblCommande :
TblCommande(
idCommande, DateCommande, idClient, SatutCommande)
idClient étant une clé étrangère reliée à la clé primaire d'une table TblClient.
Comment retrouver la commande la plus récente passée par chacun des clients ?
On peut passer par une sous-requête :
R1 :
1 2 3
| SELECT idClient, Max(DateCommande) as DateDerniereCommande
FROM TblCommande
GROUP By idClient ; |
Puis la requête principale:
1 2 3 4
| SELECT TblCommande.*
FROM TblCommande INNER JOIN R1
ON TblCommande.idClient=R1.idClient
AND TblCommande.DateCommande=R1.DateDerniereCommande; |
Si à la date la plus récente, un client a passé plusieurs commandes, toutes ces commandes sont bien entendu retournées.
On peut imbriquer la sous-requête dans la requête principale si on le souhaite :
1 2 3 4 5 6 7 8 9
| SELECT TblCommande.*
FROM TblCommande INNER JOIN
(
SELECT T.idClient, Max(T.DateCommande) as DateDerniereCommande
FROM TblCommande T
GROUP By idClient
) as R1
ON TblCommande.idClient=R1.idClient
AND TblCommande.DateCommande=R1.DateDerniereCommande; |
Elle peut également être adaptée à d’autres situations analogues : commande la plus ancienne par client (avec MIN cette fois), score le plus élevé par équipe, etc.
Partager