[Résolu] - [SQL] probleme de requetage

probleme de requetage [Résolu] - [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 19-01-2009 à 16:24:54    

Salut, Salut  :hello:  
 
je me creuse la tête sur une espèce de requête que je n'arrive pas a écrire (c'est peut-être très facile mais là je fais un blocage :D )
 
Pour commencer, le shema de la BD :
http://img132.imageshack.us/img132/3065/66539905fk0.th.gif
 
Infos sur ce shema :
 - c'est la table version_instance qui contient quasi ttes les infos d'une instance
 - une instance a plusieurs version d'instance (en gros dès qu'on modifie un valeur de l'instance cela créé une nouvelle entrée dans la table version_instance)
- je suis sous oracle 10g
 
Et la requête que je cherche a faire :
 Je veux lister pour chaque instance, toutes les données de sa version qui a la plus grande date_debut_validité.
C'est possible de faire ca en une seule requete ?
 
Merci par avance


Message édité par bob_eponge le 20-01-2009 à 15:50:28
Reply

Marsh Posté le 19-01-2009 à 16:24:54   

Reply

Marsh Posté le 19-01-2009 à 16:32:16    

je ferai  

Code :
  1. select version_instance.*,instance.*
  2. from instance, version_instance
  3. where version_instance.idinstance=instance.idinstance
  4. instace.idinstance='monidinstance'
  5. order by date_debut_validite desc //classe de la plus grande date a la plus petit
  6. limit 0,1//garde juste la premiere


 
apres peut etre qu'avec les min et max ca marche aussi

Message cité 1 fois
Message édité par infoman64 le 19-01-2009 à 16:33:36
Reply

Marsh Posté le 19-01-2009 à 16:54:20    

infoman64 a écrit :

je ferai  

Code :
  1. select version_instance.*,instance.*
  2. from instance, version_instance
  3. where version_instance.idinstance=instance.idinstance
  4. instace.idinstance='monidinstance'
  5. order by date_debut_validite desc //classe de la plus grande date a la plus petit
  6. limit 0,1//garde juste la premiere


 
apres peut etre qu'avec les min et max ca marche aussi


 
 
Merci mais ca ne correspond a ce que je veux faire.
je ne veux pas préciser instace.idinstance='monidinstance' mais plutot faire un group by pour avoir pour chaque instance les données de sa version la plus récente.
 

Reply

Marsh Posté le 19-01-2009 à 17:45:32    

ah ok désolé j'avais pas compris
c'est vrai que ca rend le truc un peu plus chaud

Reply

Marsh Posté le 20-01-2009 à 11:54:13    

Salut,
 
Je ne sais pas si ça fonctionne sous Oracle, mais j'aurai fait :  
 
SELECT VERSION_INSTANCE.*
FROM VERSION_INSTANCE
INNER JOIN (
 SELECT VI.Id_Version_Instance ID, MAX(VI.Date_Validite) MDV
 FROM VERSION_INSTANCE VI
 GROUP BY VI.Id_Version_Instance
 ) DRV ON DRV.ID = VERSION_INSTANCE.Id_Version_Instance
  AND DRV.MDV = VERSION_INSTANCE.Date_Validite
 
Pour moi, ça doit ressortir toutes les données de chaque VERSION_INSTANCE les plus récentes.
Après, tu dois pouvoir faire ta jointure avec INSTANCE, du genre :  
 
SELECT *
FROM VERSION_INSTANCE
INNER JOIN (
 SELECT VI.Id_Version_Instance ID, MAX(VI.Date_Validite) MDV
 FROM VERSION_INSTANCE VI
 GROUP BY VI.Id_Version_Instance
 ) DRV ON DRV.ID = VERSION_INSTANCE.Id_Version_Instance
  AND DRV.MDV = VERSION_INSTANCE.Date_Validite
INNER JOIN INSTANCE ON INSTANCE.Id_Instance = VERSION_INSTANCE.Id_Instance
 
Bon courage,


Message édité par Tibar le 20-01-2009 à 11:55:22
Reply

Marsh Posté le 20-01-2009 à 12:07:49    

Mon cerveau te remercie :D

Reply

Marsh Posté le 20-01-2009 à 15:00:27    

Pas de problème,
 
C'est bizarre le nombre de fois que ce problème se pose, et même en ayant la solution, j'ai toujours du "mal" avec cette syntaxe... D'ailleurs, je ne suis pas sur que ce soit la solution la plus simple ni la plus efficace, mais c'est toujours celle la que j'ai eu à appliquer pour ce genre de requête...

Reply

Marsh Posté le 20-01-2009 à 15:18:15    

On est d'accord.
En commencant, je me disait que c'etait une requête toute conne, mais en fait pas du tout.
 
Je l'ai appliqué et ca marche parfaitement en tout cas

Reply

Sujets relatifs:

Leave a Replay

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