1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| WITH table_plages AS (
SELECT TO_DATE('2008-01-01', 'RRRR-MM-DD') deb, TO_DATE('2008-06-06', 'RRRR-MM-DD') fin FROM DUAL
UNION ALL SELECT TO_DATE('2009-02-08', 'RRRR-MM-DD') deb, TO_DATE('2009-03-08', 'RRRR-MM-DD') fin FROM DUAL
UNION ALL SELECT TO_DATE('2009-03-09', 'RRRR-MM-DD') deb, TO_DATE('2010-06-03', 'RRRR-MM-DD') fin FROM DUAL
UNION ALL SELECT TO_DATE('2010-05-01', 'RRRR-MM-DD') deb, TO_DATE('2010-06-01', 'RRRR-MM-DD') fin FROM DUAL
UNION ALL SELECT TO_DATE('2010-06-02', 'RRRR-MM-DD') deb, TO_DATE('2011-07-05', 'RRRR-MM-DD') fin FROM DUAL
),
t2 AS (SELECT TO_DATE('01.01.2007', 'DD.MM.RRRR') + LEVEL -1 dte
FROM dual
CONNECT BY LEVEL < (TO_DATE('31.12.2030', 'DD.MM.RRRR') - TO_DATE('01.01.2007', 'DD.MM.RRRR') + 2)),
t3 AS (SELECT dte
FROM t2
WHERE EXISTS (SELECT 1 FROM table_plages t WHERE t2.dte BETWEEN t.deb AND t.fin ))
SELECT MIN(dte) AS deb, MAX(dte) AS fin
FROM (SELECT dte, dte - row_number() OVER(ORDER BY dte ASC) AS grp FROM t3 )
GROUP BY grp
ORDER BY MIN(dte) |
Partager