Один из способов сделать это - использовать рекурсивный запрос:
with cte (user_id, start_datemonth, start_dateday, lead_start_datemonth) as (
select
user_id,
start_datemonth,
start_dateday,
lead(start_datemonth) over(partition by user_id order by start_datemonth) lead_start_datemonth
from mytable
union all
select
user_id,
start_datemonth + 1,
start_dateday,
lead_start_datemonth
from cte
where start_datemonth + 1 < lead_start_datemonth
)
select user_id, start_datemonth, start_dateday from cte
Демонстрация на DB Fiddle :
user_id | start_datemonth | start_dateday
-------: | --------------: | ------------:
11110002 | 210601 | 1
11110002 | 210602 | 1
11110002 | 210603 | 1
11110002 | 210604 | 2
11110002 | 210605 | 2
11110002 | 210606 | 2
11110002 | 210607 | 4