2016-02-15 3 views
1

У меня есть набор данных, как этотИзбегайте самостоятельно присоединиться и обновить

rowno kc  id  BStart  bFinish  Perioddate 
310  48  307861 2015-01-20 2015-01-22 2015-10-10 
310  48  307861 2015-01-20 2015-01-22 2016-01-16 
310  48  307861 2015-01-20 2015-01-22 2016-04-23 
310  48  307861 2015-01-20 2015-01-22 2016-07-30 
310  48  307861 2015-01-20 2015-01-22 2016-11-05 
310  48  307861 2015-01-20 2015-01-22 2019-01-13 
310  48  307861 2015-01-20 2015-01-22 NULL 


UPDATE m2   
    SET   
    BStart = (CASE WHEN m.BStart <= m2.BFinish and m2.BFinish <= m.Perioddate   
     THEN DATEADD(dd, 1,m.periodDate)   
    WHEN m.BStart <= m2.BFinish And m2.BFinish > m2.periodDate And m.BStart <= m.PeriodDate   
     THEN DATEADD(dd, 1,m.periodDate)   
    ELSE m.BStart END)  
    FROM #result56 AS m   
    INNER JOIN #result56 AS m2   
    ON m.ROWNO = m2.ROWNO - 1 
    and m.Kc = m2.Kc; 

я получаю выход из оператора обновления, как этот

rowno kc  id  BStart  bFinish  Perioddate 
310  48  307861 2015-01-20 2015-01-22 2015-10-10 
310  48  307861 2015-10-11 2015-01-22 2016-01-16 
310  48  307861 2016-01-17 2015-01-22 2016-04-23 
310  48  307861 2016-04-24 2015-01-22 2016-07-30 
310  48  307861 2016-07-31 2015-01-22 2016-11-05 
310  48  307861 2016-11-06 2015-01-22 2019-01-13 
310  48  307861 2019-01-14 2015-01-22 NULL 

Как я могу получить результат, используя только выбрать без обновлений и без используя самоподключение

ответ

-1

Если вы просто необходимо «строка перед» (m.ROWNO = m2.ROWNO - 1), то я бы предложил использовать LEAD; , но так как вы также нуждаетесь в m.Kc = m2.Kc Я не вижу, как вы хотите добиться этого без самодостаточности, чтобы быть честным.

+0

Вы не новичок здесь, это должен быть комментарий – sagi

Смежные вопросы