[FAQ] : retrouver les enregistrements les plus récents par catégorie
Bonjour à tous,
rien d’extraordinaire ici mais voilà quand même le genre de requêtes qui revient souvent sur le forum :
Requête complexe : statut le plus récent de plusieurs dossiers
suppression de données en fonction de la date
la date la plus recente
Afficher la date la plus recente
et la dernière à ce jour:
Date la plus récente dans requête
et j’en passe encore…
Comme je n’ai pas trouvé d’entrée dans la FAQ sur le sujet:(, j’en propose une nouvelle, du style :
Citation:
Envoyé par FAQ: retrouver les enregistrements les plus récents par catégorie
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 :
Code:
1 2 3
| SELECT idClient, Max(DateCommande) as DateDerniereCommande
FROM TblCommande
GROUP By idClient ; |
Puis la requête principale:
Code:
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 :
Code:
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.
voilà voilà;)