Bonjour,
je travaille sous oracle10g et j'ai dû écrire une requête assez longue et couteuse basé sur plusieurs union pour traiter un cas, un collègue m'a dis que tout ce que j'ai écris pouvais surement être simplifier en une seule requête en utilisant les fonctions analytiques, j'ai essayé mais là je peine à y arriver et me demande sérieusement si cela est possible. Voici la description de mon problème :
je gère une sorte de gestion de version de fichiers, ceux-ci sont classés par famille (type de fichier) , chaque fichier est versionné (à un instant T on génère une nouvelle version pour chaque type).
Certains type de fichiers utilisent des variantes : pour un même version je dispose de plusieurs déclinaisons ou variantes, donc à un instant T après une génération, voici la liste des fichier à jour :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Fichiers_UptoDate de la vue V_LAST_VERSION_FILES  :
   TypeFic           NomFic      Version      Variante      UseVariante
--------------------------------------------------------------------------------
   A                 Fic1              5                             N
   B                 Fic2              6            1                O
   B                 Fic3              7            2                O
Dans une application, je créée une configuration de fichier (groupe) qui doit regrouper 2 fichiers de type A et 3 de type B; donc à l'instant T voici le contenu d'une de ces configurations (certains fichiers sont déjà assigné et on peut donc voir leur nom et d'autre pas encore ont un nom de fichier null):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Fichiers_config1 de la vue V_CONFIG1  :
   TypeFic           NomFic      Version      Variante      UseVariante
---------------------------------------------------------------------
   A                                                                N (>fichier pas encore assigné)  
   B                                                                O (>fichier pas encore assigné)
   A                 Fic0              0                            N
   B                 Ficx              1           1                O
   B                 Ficy              1           2                O
Dans mon application, je désire maintenant écrire une requête qui puisse me donner :

  • le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type de la vue V_CONFIG1 ne possédant pas de fichier assigné et n'utilisant pas de variante.
  • null pour le numéro de version de chaque ligne de la vue V_CONFIG1 ne possédant pas de fichier assigné et utilisant une variante.
  • le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type de la vue V_CONFIG1 possédant un fichier assigné et n'utilisant pas de variante.
  • le numéro de version de la vue V_LAST_VERSION_FILES pour chaque fichier du même type et avec le même numéro de variante de la vue V_CONFIG1 possédant un fichier assigné et utilisant une variante.


Ma requête devrait donc me renvoyer le résultat suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Résultat attendu  :
   TypeFic     NomFic   Version    Variante      UseVariante  VersionUpToDate
----------------------------------------------------------------------------------
   A                                                      N           5
   B                                                      O           null
   A            Fic0           0                          N           5
   B            Ficx           1         1                O           6
   B            Ficy           1         2                O           7
J'ai essayé de simplifié pour l'exemple mais les deux vues contiennent plusieurs milliers de lignes. J'ai réussis à écrire ma requête en faisant plusieurs union pour chacun des cas à traiter, mais la requête est extrêmement lente et j'aimerais savoir si le résultat peut être obtenu en une seule requête en utilisant les fonctions analityques (j'essaye mais je n'arrête pas de rencontrer des difficulutés notamment sur les jointures )...
N'hésitez pas si vous avez des questions!
Merci d'avance, Lek.