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 30 31 32 33 34 35
|
select DISTINCT
CALENDRIER_ETAT.DATE,
STATUT,
DECOUPAGE_JOUR.deb_par_jour,
DECOUPAGE_JOUR.fin_par_jour,
round(nvl(sum(DECOUPAGE_JOUR.fin_par_jour - DECOUPAGE_JOUR.deb_par_jour), 0)*86400) DUREE
from (SELECT DISTINCT CALENDRIER.DATE,
case when TRUNC(TO_DATE (IND.DATE_DEBUT,'DD/MM/YYYY HH24:MI:SS')) = trunc(CALENDRIER.DATE)
then TO_DATE (IND.DATE_DEBUT,'DD/MM/YYYY HH24:MI:SS')
else TO_DATE(TO_CHAR(CALENDRIER.DATE,'DD.MM.YYYY')|| '00:00:01','DD.MM.YYYY HH24:MI:SS')
end deb_par_jour,
case when TRUNC(TO_DATE (IND.DATE_FIN,'DD/MM/YYYY HH24:MI:SS')) = trunc(CALENDRIER.DATE)
then TO_DATE (IND.DATE_FIN,'DD/MM/YYYY HH24:MI:SS')
else TO_DATE(TO_CHAR(CALENDRIER.DATE,'DD.MM.YYYY')|| '23:59:59','DD.MM.YYYY HH24:MI:SS')
end fin_par_jour,
IND.STATUT
FROM (SELECT DISTINCT PERIODE.DATE_DEBUT + rownum - 1 DATE
FROM (SELECT TRUNC(MIN(TO_DATE (DATE_DEBUT,'DD/MM/YYYY HH24:MI:SS'))) DATE_DEBUT,
TRUNC(MAX(TO_DATE (DATE_FIN,'DD/MM/YYYY HH24:MI:SS'))) DATE_FIN
FROM DATA IND) PERIODE
connect by level <= PERIODE.DATE_FIN - PERIODE.DATE_DEBUT + 1) CALENDRIER,
DATA IND
WHERE CALENDRIER.DATE between TRUNC(TO_DATE (IND.DATE_DEBUT,'DD/MM/YYYY HH24:MI:SS')) and TRUNC(TO_DATE (IND.DATE_FIN,'DD/MM/YYYY HH24:MI:SS'))) DECOUPAGE_JOUR,
(SELECT DISTINCT PERIODE.DATE_DEBUT + rownum - 1 DATE
FROM (SELECT TRUNC(MIN(TO_DATE (DATE_DEBUT,'DD/MM/YYYY HH24:MI:SS'))) DATE_DEBUT,
TRUNC(MAX(TO_DATE (DATE_FIN,'DD/MM/YYYY HH24:MI:SS'))) DATE_FIN
FROM DATA IND) PERIODE
connect by level <= PERIODE.DATE_FIN - PERIODE.DATE_DEBUT + 1) CALENDRIER_ETAT
-- Jointure externe pour inclure les jours sans données
WHERE CALENDRIER_ETAT.DATE = DECOUPAGE_JOUR.DATE(+)
group by CALENDRIER_ETAT.DATE, STATUT, DECOUPAGE_JOUR.fin_par_jour,
DECOUPAGE_JOUR.deb_par_jour
ORDER BY CALENDRIER_ETAT.DATE,
DECOUPAGE_JOUR.deb_par_jour |
Partager