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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT idClient, Max(DateCommande) as DateDerniereCommande
FROM TblCommande
GROUP By idClient ;

Puis la requête principale:

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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à