[SQL] faire un distinct un peu plus évoluer ?
Nico
-
Nico -
Nico -
Bonjour à tous,
Je n'arrive pas à trouver la syntaxe SQL pour réaliser l'action suivante :
ma table MATABLE est de cette forme :
ID
DATE
ETAT
Je souhaiterais récupérer les derniers états (ETAT) de mes identifiants (ID) dans ma table MATABLE en ayant (pour les doublons) l'enregistrement ou le champ DATE est le plus vieux
Bien sûr le "select distinct(ID), ETAT from MATABLE" me retourne la liste de mes ID et ETAT (sans doublons), par contre, ce n'est pas forcémment le dernier état.
Je n'arrive pas à trouver la syntaxe SQL pour réaliser l'action suivante :
ma table MATABLE est de cette forme :
ID
DATE
ETAT
Je souhaiterais récupérer les derniers états (ETAT) de mes identifiants (ID) dans ma table MATABLE en ayant (pour les doublons) l'enregistrement ou le champ DATE est le plus vieux
Bien sûr le "select distinct(ID), ETAT from MATABLE" me retourne la liste de mes ID et ETAT (sans doublons), par contre, ce n'est pas forcémment le dernier état.
A voir également:
- [SQL] faire un distinct un peu plus évoluer ?
- Logiciel sql - Télécharger - Bases de données
- Blob sql ✓ - Forum Webmastering
- Comment faire évoluer kadabra en alakazam sans échange - Forum Pokémon
- Comment faire évoluer geolithe - Forum Jeux vidéo
- Quand evolue geolithe dans pokemon noir - Forum Jeux vidéo
4 réponses
Merci pour ta réponse Aelith.
Je souhaiterais récupérer les derniers états (ETAT) de mes identifiants (ID) dans ma table MATABLE en ayant (pour les doublons) l'enregistrement ou le champ DATE est le plus vieux
Avec les valeurs suivantes par exemple :
123 01/01/2008 OK
456 04/01/2008 OK
123 02/01/2008 OK
456 01/01/2008 OK
123 03/01/2008 PB
Il faudrait que je récupère :
123 03/01/2008 PB
456 04/01/2008 OK
l' "order by" va s'appliquer au distinct, mais pas au enregistrement unique, non?
Je souhaiterais récupérer les derniers états (ETAT) de mes identifiants (ID) dans ma table MATABLE en ayant (pour les doublons) l'enregistrement ou le champ DATE est le plus vieux
Avec les valeurs suivantes par exemple :
123 01/01/2008 OK
456 04/01/2008 OK
123 02/01/2008 OK
456 01/01/2008 OK
123 03/01/2008 PB
Il faudrait que je récupère :
123 03/01/2008 PB
456 04/01/2008 OK
l' "order by" va s'appliquer au distinct, mais pas au enregistrement unique, non?
La requete que tu proposes ne retourne pas le résultat attendu (je l'avais aussi testée).
ça retourne :
456 OK
123 PB
123 OK
au lieu de :
456 OK
123 PB
ça retourne :
456 OK
123 PB
123 OK
au lieu de :
456 OK
123 PB
Après plusieurs essais, je pense avoir finalement trouvé ce que tu cherchais:
select ID, ETAT, DATE from MATABLE where DATE in (select max(DATE) from MATABLE group by ID )
(j'ignore cependant la réaction si deux enregistrements correspondent à la date la plus récente pour le même ID, je n'ai plus le temps de tester...)
select ID, ETAT, DATE from MATABLE where DATE in (select max(DATE) from MATABLE group by ID )
(j'ignore cependant la réaction si deux enregistrements correspondent à la date la plus récente pour le même ID, je n'ai plus le temps de tester...)
je viens de lancer la requete, j'ai le retour suivant :
456 04/01/2008 OK
456 04/01/2008 OK
123 03/01/2008 PB
Donc, j'ai ajouter un distinct, et là j'ai bein :
456 04/01/2008 OK
123 03/01/2008 PB
Avec le requete :
select distinct(ID), ETAT, DATE from MATABLE where DATE in (select max(DATE) from MATABLE group by ID )
Donc apparement ça me retourne un truc juste, je vais maintenant voir si avec de grosses tables, ça ne rame pas trop.
Merci pour ton aide Aelith
456 04/01/2008 OK
456 04/01/2008 OK
123 03/01/2008 PB
Donc, j'ai ajouter un distinct, et là j'ai bein :
456 04/01/2008 OK
123 03/01/2008 PB
Avec le requete :
select distinct(ID), ETAT, DATE from MATABLE where DATE in (select max(DATE) from MATABLE group by ID )
Donc apparement ça me retourne un truc juste, je vais maintenant voir si avec de grosses tables, ça ne rame pas trop.
Merci pour ton aide Aelith