with	wtf1 as (
    select	'25-07-1' yo
        ,	to_date('01-01-2001', 'dd-mm-yyyy')	ye
    from	dual	union all
    select	'24-03-2'
        ,	to_date('31-12-2022', 'dd-mm-yyyy')
    from	dual	union all
    select	'20-08-3'
        ,	to_date('27-02-1980', 'dd-mm-yyyy')
    from	dual
    ),
        wtf2 as (
    select	rownum + (select min(ye) from wtf1) - 1 day_x
            ,	to_char((rownum + (select min(ye) from wtf1) - 1), 'dd-mm-D') day_mon
    from	dual
    connect by	rownum <= 100500
    )
select	*
from
        (
        select	yo
            ,	ye
            ,	day_x
            ,	day_mon
            ,	row_number() over(partition by day_mon order by day_x) rn
        from	wtf2
        join	wtf1
        on	wtf2.day_mon = wtf1.yo
            and	day_x >= ye
        )
where	rn = 1
/
