1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| with TPERIODE as (
-- Premiere requete pour récupérer toutes les periodes pour X debut de periode pour une date de fin (Si plusieurs défaut avant l'enregistrement fin de defaut)
SELECT P_DEBUT.DATE_DEFAUT AS Debut_Periode_Multi
,P_DEBUT.NATURE AS Periode_Nature
,P_DEBUT.DESC_DEFAUT AS Debut_Periode_Desc
,P_FIN.DATE_DEFAUT AS Fin_Periode
,P_FIN.DESC_DEFAUT AS Fin_Periode_Desc
, row_number() over (partition by P_DEBUT.NATURE,P_DEBUT.DESC_DEFAUT,P_FIN.DATE_DEFAUT,P_FIN.NATURE,P_FIN.DESC_DEFAUT order by P_DEBUT.DATE_DEFAUT ASC) rn
--utilisation de row_number pour classer les eventuelles debut de periode pour une fin de periode donnée par ordre croissant
FROM T_DEFAUT_TEMP P_DEBUT
INNER JOIN T_DEFAUT_TEMP P_FIN
ON P_DEBUT.NATURE = P_FIN.NATURE
AND P_DEBUT.DESC_DEFAUT LIKE 'Temp%'
AND P_FIN.DESC_DEFAUT = 'Fin Defaut'
AND P_DEBUT.DATE_DEFAUT < P_FIN.DATE_DEFAUT
--recuperation de la premiere fin de periode de defaut pour chaque debut de periode possible
AND P_FIN.DATE_DEFAUT = (SELECT MIN(DATE_DEFAUT)
FROM T_DEFAUT_TEMP P_FIN_MIN
WHERE P_FIN_MIN.NATURE = P_FIN.NATURE
AND P_DEBUT.DATE_DEFAUT < P_FIN_MIN.DATE_DEFAUT
AND P_FIN_MIN.DESC_DEFAUT = P_FIN.DESC_DEFAUT)
)
SELECT Periode_Nature,Debut_Periode_Desc,Debut_Periode_Multi Debut_Periode, Fin_Periode, RELTEMP.NOM_TEMP, RELTEMP.DATE_RELEVE, RELTEMP.VALEUR_TEMP
FROM TPERIODE
INNER JOIN T_RELEVE_TEMP RELTEMP
ON RELTEMP.NOM_TEMP = 'Temp 1234' AND TPERIODE.Periode_Nature = 'Event 1234'
AND RELTEMP.DATE_RELEVE BETWEEN TPERIODE.Debut_Periode_Multi AND TPERIODE.Fin_Periode
WHERE RN = 1 -- pour ne prendre que le début de periode le plus ancien pour chaque periode identifié
ORDER BY Debut_Periode_Multi; |
Partager