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

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.
Configuration: Windows Vista
Internet Explorer 7.0

4 réponses

  1. Aelith
     
    bonjour,

    As-tu essayé de rajouter un "ORDER BY" sur la date dans ta requête ?
    0
  2. Nico
     
    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
    1. Aelith
       
      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
  3. Nico
     
    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
    1. Aelith
       
      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
  4. Nico
     
    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