2013-08-27 1 views
1

Я ищу способ обновить все строки, у которых есть другое событие за день до этого.Получить строки с последовательной датой (днем)

Пример:

ID  Config Number  Date   Status 
1  238    10/9/2013  1 
2  351    1/9/2013  2 
3  351    2/9/2013  0 
4  238    11/9/2013  0 
5  124    18/9/2013  3 
6  238    20/9/2013  0 
7  238    12/9/2013  0 
8  124    20/9/2013  0 
9  238    13/9/2013  0 

И после обновления я хотел бы иметь что-то вроде:

ID  Config Number  Date   Status 
1  238    10/9/2013  1 
2  351    1/9/2013  2 
3  351    2/9/2013  2 
4  238    11/9/2013  1 
5  124    18/9/2013  3 
6  238    20/9/2013  0 
7  238    12/9/2013  1 
8  124    20/9/2013  0 
9  238    13/9/2013  1 

То, что я сейчас является:

Update sc 
set sc.Status = (Select Status From sc1 inner Join sc On sc.Id = sc1.ID) 
From sc 

И я это знаю не работает, но я не могу понять, как должен выглядеть мой запрос.

+1

Пожалуйста, покажите нам код, который вы пробовали, и почему он не работает. – Kermit

+0

Я отредактировал мой вопрос с тем, что у меня есть. – JoSav

ответ

1
update T1 set 
    Status = T2.[Status] 
from sc as T1 
    inner join sc as T2 on T2.[Date] = dateadd(dd, -1, T1.Date) 

sql fiddle demo

из, если вы должны искать предыдущую дату только внутри Config Number

update T1 set 
    Status = T2.[Status] 
from sc as T1 
    inner join sc as T2 on T2.[Date] = dateadd(dd, -1, T1.Date) and T2.[Config Number] = T1.[Config Number] 
+0

Как я могу сделать это, если у меня есть более 1 последовательной даты? – JoSav

+2

, пожалуйста, укажите пример, что именно вы хотите получить –

+0

Я редактирую свой пост, чтобы показать вам, что я хочу получить. – JoSav

1

Мы можем использовать в «автообъединение» путем присоединения к таблице к себе, но с условие последовательных дней. Включение этого в обновление выглядит следующим образом:

update a 
set a.[Status] = b.[Status] 
from sc as a 
    join sc as b on a.[Config Number] = b.[ConfigNumber] 
     and a.[Date] = dateadd(dd, 1, b.[Date]) 

Это будет обновлять последовательную запись, которая соответствует Config Config. Я предполагаю, что ваши демо-данные после обновления имеют ошибочную повторяющуюся запись в конце.

Кроме того, как общие точки:

  • Попробуйте использовать ISO 8601 форматирования даты, чтобы устранить неоднозначность в ваших дат (например, "2013-09-20").
  • Не используйте пробелы в именах столбцов.
  • В качестве имен столбцов старайтесь избегать keywords.
+0

Как это сделать, если у меня есть более одной последовательной даты? – JoSav

+0

Я отредактировал мой вопрос с тем, что у меня есть. – JoSav

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