Bonjour,


J'ai développé une petite requête qui marchait jusque là plutôt pas mal.
Le besoin évoluant, j'aurais besoin de rajouter deux trois colonnes, mais j'ai un doute sur la bonne facon de le faire, ainsi que sur la faisabilité.

Vous pourriez me donner un coup de main svp ?



Voici en l'état ma requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
CV_CON_NUMBER
,max(CV_NUMBER            ) AS	CV_NUMBER
,max(CV_AUTO_RENEWAL      ) keep (dense_rank first order by CV_NUMBER desc) AS CV_AUTO_RENEWAL      
,max(CV_BONUS_CLASS       ) keep (dense_rank first order by CV_NUMBER desc) AS CV_BONUS_CLASS       
,max(CV_CONSTRUCTED_BY    ) keep (dense_rank first order by CV_NUMBER desc) AS CV_CONSTRUCTED_BY    
,max(CV_CONSTRUCTION_TIME ) keep (dense_rank first order by CV_NUMBER desc) AS CV_CONSTRUCTION_TIME 
,max(CV_CRC_CODE          ) keep (dense_rank first order by CV_NUMBER desc) AS CV_CRC_CODE          
,max(CV_CST_CODE          ) keep (dense_rank first order by CV_NUMBER desc) AS CV_CST_CODE          
FROM japhonie.contract_versions CV
WHERE NOT (cv_status_code = '09' OR cv_status_code = '9') 
and		CV_CONSTRUCTION_TIME > sysdate -900
group by CV_CON_NUMBER
having max(CV_CRC_CODE) keep (dense_rank first order by CV_NUMBER desc) not IN (12, 13, 14, 15, 16, 102)
Je sais pas si c'est ultra parlant comme tel, mais d'un point de vue fonctionnel, ca me permet de récupérer des informations sur la dernière version de mon contrat.

(Vous l'avez peut-etre déjà vue passer, j'avais posé des questions à ce sujet sur un poste précédent)


Donc, à partir de là, ce que je voudrais rajouter est la chose suivante :
* Je veux le nombre de versions créées par internet (assez facile : ,SUM(case when CV_CONSTRUCTED_BY = 'INTERNET' then 1 else 0 END) AS OE_NUM)
* Je veux aussi les trois dernières dates des versions créées par INTERNET... et là, ca se complique pour moi.

Je vois bien comment sélectionner la première date, avec le KEEP... mais comment je sélectionne la deuxième, et la troisième ? Y'a-t-il un moyen de faire ca en utilisant KEEP directement ? ou faut que je passe par des intermédiaires ?

Je pensais faire une CTE en amont pour rajouter le rang, mais si c'est possible de faire ca directement dans le keep, je pense que je préférerai...

Vous auriez une piste à me donner ?

Merci d'avance.


Steven