By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table Appointment(Start date)
insert into Appointment values('2010-01-01')
1 rows affected
with cte as
( Select 1 as Header
,Start
,dateadd(day, 30, Start) as AdditionalDate
,30 as AdditionalDays
from Appointment
union all
select Header+1
,Start
,dateadd(day, 30, AdditionalDate)
,AdditionalDays + 30
from cte
where Header <= 2
)
Select * from cte
Header | Start | AdditionalDate | AdditionalDays |
---|---|---|---|
1 | 2010-01-01 | 2010-01-31 | 30 |
2 | 2010-01-01 | 2010-03-02 | 60 |
3 | 2010-01-01 | 2010-04-01 | 90 |
with cte as
( Select 1 as Header
,Start
,dateadd(month, 1, Start) as AdditionalDate
,datediff(day, Start, dateadd(month, 1, Start)) as AdditionalDays
from Appointment
union all
select Header+1
,Start
,dateadd(month, 1, AdditionalDate)
,datediff(day, Start, dateadd(month, 1, AdditionalDate))
from cte
where Header <= 2
)
Select * from cte
Header | Start | AdditionalDate | AdditionalDays |
---|---|---|---|
1 | 2010-01-01 | 2010-02-01 | 31 |
2 | 2010-01-01 | 2010-03-01 | 59 |
3 | 2010-01-01 | 2010-04-01 | 90 |