Segue queries para gerar lista de meses com data inicial e final de cada mês:
SELECT
TO_CHAR(TRUNC (ANOBASE, 'YEAR'), 'YYYY') ANO,
TO_CHAR(LEVEL, '00') MES,
((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTINI,
LAST_DAY ((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTFIN
from (SELECT TO_DATE('01/01/2022') ANOBASE from dual)
connect by level <= 12
TO_CHAR(TRUNC (ANOBASE, 'YEAR'), 'YYYY') ANO,
TO_CHAR(LEVEL, '00') MES,
((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTINI,
LAST_DAY ((SELECT ADD_MONTHS (TRUNC (ANOBASE, 'YEAR'), -1) FROM DUAL) + numtoyminterval(level,'month')) as DTFIN
from (SELECT TO_DATE('01/01/2022') ANOBASE from dual)
connect by level <= 12
Exemplo de saída:
Depois disso basta dar um join em outra tabela que desejar e usar as datas geradas para subconsultas.