2013-12-03 3 views
0

Привет, Iv получил большие проблемы с одним запросом, а следующая DateTo подсчитывается из предыдущей записи.MSSQL Рекурсивный dateadd

У меня есть одна таблица

create table #t1 (
M_ID int, --ID of group 
STEP int, -- Step number 
DateTo Datetime, --DateTo 
AddDays int) --Number of days to add to NEXT record 

--TestData

INSERT INTO #t1 
select 1, 1, GETDATE(), 0 union 
select 1, 2, null, 1 union 
select 1, 3, null, 0 union 
select 1, 4, null, 0 union 
select 2, 1, GETDATE(), 0 union 
select 2, 2, NULL, 1 union 
select 2, 3, NULL, 0 

Как таблица выглядит.

enter image description here Логика:

If step = 1 then DateTo = GETDATE() 
At step 2 of M_ID 1 previous row had 0 days to add so it should copy DateTo from previous row 
At step 3 of M_ID 1 previous row has 1 day to add to previous DateTo 

Im на конце моей веревки ...

FAQ должны быть сделаны в T-SQL (8KK записи +)

+0

Пожалуйста правильно отформатируйте свой вопрос. –

+0

Какой вопрос? –

ответ

2
;with cte as (
    select M_ID, STEP, DateTo, AddDays 
    from #t1 
    where STEP = 1 
    union all 
    select t.M_ID, t.STEP, dateadd(dd, c.AddDays, c.DateTo), t.AddDays 
    from #t1 t 
    inner join cte c on t.M_ID = c.M_ID and t.STEP = c.STEP + 1 
) 

select * 
from cte 
+0

Огромное спасибо, пытался с обычными табличными выражениями, но без успехов. – VoonArt