我正在寻找一种方法来更新前一天出现其他行的所有行。
示例:
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
我知道它不起作用,但我无法弄清楚我的查询应该是什么样子。
答案 0 :(得分:1)
update T1 set
Status = T2.[Status]
from sc as T1
inner join sc as T2 on T2.[Date] = dateadd(dd, -1, T1.Date)
,如果您必须在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]
答案 1 :(得分: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])
这将更新与配置号匹配的连续记录。我假设您的“更新后”演示数据最后有错误的重复记录。
另外,作为一般要点: