Aide sur une requete

Aide sur une requete - SQL/NoSQL - Programmation

Marsh Posté le 27-02-2006 à 17:44:46    

J'ai une table OS3 qui contient les champs suivants :  
ID : identifiant de la table
ENTRY_ID : identifiant d'une donnée d'une autre table
STATUS : une chaine de caractère
CREATION_DATE : la date de creation du status
 
Sachant que pour chaque ENTRY_ID je dispose de plusieurs STATUS,
je voudrais récupérer que les ENTRY_ID et le status ayant le plus grand CREATION_DATE  
pour chaque ENTRY_ID  
 
Exemple :  
 
de ces données :
 
ID ENTRY_ID STATUS CREATION_DATE
1 5  ST1 12/12/2005
2 5  ST3 12/12/2006    
3 5  ST7 12/12/2009
4 9  ST9 12/12/1990
5 9  ST7 12/12/1995    
6 9  ST2 12/12/2000
 
Je voudrais récupérer que :  
 
ID ENTRY_ID STATUS CREATION_DATE
3 5  ST7 12/12/2009
6 9  ST2 12/12/2000
 
Comment faire ? les fonctions analytiques d'Oracle peuvent nous aider ?  
je travaille sur Oracle 9i

Reply

Marsh Posté le 27-02-2006 à 17:44:46   

Reply

Marsh Posté le 27-02-2006 à 18:29:31    

Code :
  1. SELECT os.ID,
  2.        os.ENTRY_ID,
  3.        os.STATUS,
  4.        os.CREATION_DATE
  5. FROM OS3 os,
  6.      (SELECT ENTRY_ID,
  7.              MAX(CREATION_DATE)
  8.       FROM OS3
  9.       GROUP BY ENTRY_ID) sub
  10. WHERE os.ENTRY_ID = sub.ENTRY_ID
  11. AND os.CREATION_DATE = sub.CREATION_DATE;


 
Ca doit être faisable avec une fonction analytique, mais je ne suis pas très habitué :D

Reply

Marsh Posté le 28-02-2006 à 11:03:04    

on peut aussi faire :
 

Code :
  1. select
  2.   os.id,
  3.   os.status,
  4.   os.creation_date
  5. from os3 os
  6. where os.creation_date = (select max(creation_date) from os3 where id = os.id)


Message édité par Arjuna le 28-02-2006 à 11:03:24
Reply

Sujets relatifs:

Leave a Replay

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