[SQL] faire un distinct un peu plus évoluer ?

Fermé
Nico - 16 avril 2008 à 10:54
 Nico - 16 avril 2008 à 13:39
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.
A voir également:

4 réponses

bonjour,

As-tu essayé de rajouter un "ORDER BY" sur la date dans ta requête ?
0
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?
0
Est-ce que "select distinct(ID), ETAT from MATABLE order by DATE desc" fonctionne ?

sinon il faudrait peut-etre utiliser un group by ID...

je jetterai un oeil ce midi, je n'ai rien pour tester sous la main pour l'instant
0
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
0
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...)
0
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
0