Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2011, 14h31   #1
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Par défaut [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 sql :
1
2
3
SELECT idClient, Max(DateCommande) AS DateDerniereCommande
FROM TblCommande
GROUP BY idClient ;

Puis la requête principale:

Code sql :
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 :
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à
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 30
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h24.


 
 
 
 
Partenaires

Hébergement Web