Recupérer les lignes ou les dates sont les plus récente

Recupérer les lignes ou les dates sont les plus récente - SQL/NoSQL - Programmation

Marsh Posté le 15-04-2009 à 09:49:46    

Bonjour,
j'ai une table composé de 3 colonne : (exemple)
id, dateEvt, action
1 2008-01-02  a
2 2008-05-03  a
2 2009-01-04  b
3 2007-06-01  a
4 2005-12-10  a
4 2007-10-05  b
4 2008-10-14  b
5 2008-01-12  a
5 2005-01-01  a
 
A partir de cette requete, j'obtiens tout les id qui ont une action a et pas d'action b.
SELECT id, dateEvt FROM evt WHERE action = 'a' AND id NOT IN (SELECT id FROM evt WHERE action = b;
J'aimerais que lorsque le même id a plusieurs action identique (à savoir dans l'ex : 5), ne retrouver que la ligne correspondant à la dateEvt la plus récente.
 
Auriez vous une idée ?
 
Merci :jap:


---------------
Aloha
Reply

Marsh Posté le 15-04-2009 à 09:49:46   

Reply

Marsh Posté le 15-04-2009 à 10:25:56    

Il faudrait une sous requête sur le max de la date.
Ce qui donnerait :

SELECT e1.id, e1.dateEvt
  FROM evt e1
 WHERE e1.action = 'a'
   AND e1.id NOT IN
        (SELECT e2.id FROM evt e2
         WHERE e2.action = 'b')
   AND e1.dateEvt IN
        (SELECT max(e3.dateEvt) FROM evt e3
         WHERE e3.id = e1.id);

N.B. Pour éviter les confusions, j'ai préfixé chaque champ avec un alias (e1, e2, ou e3) du nom de la table.

Reply

Marsh Posté le 15-04-2009 à 10:53:22    

En fait, cette requete suffit :
SELECT id, MAX(dateEvt) FROM evt WHERE action = 'a' AND id NOT IN (SELECT id FROM evt WHERE action = b GROUP BY id;  
 
Merci :d


---------------
Aloha
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed