这是我的原始表:
row itm wk ft sd
1 i1 w1 0 0
2 i1 w2 1 0
3 i1 w3 1 0
4 i1 w4 1 0
5 i1 w5 0 1
6 i1 w6 0 1
7 i1 w7 0 0
8 i1 w8 0 0
----------
9 i2 w1 0 0
10 i2 w2 0 0
11 i2 w3 1 0
12 i2 w4 1 0
13 i2 w5 0 1
14 i2 w6 0 1
15 i2 w7 0 0
16 i2 w8 0 0
我希望将“sd”列标记为1,表示该行的下两行(周),“ft”列已将每个项目的状态从1更改为0。
例如: - 在上面的数据集中有两个项目'i1'和'i2',每个项目有8周的数据(w1-w8),“ft”列每周有值(1或0),但在8周内一个项目的ft列将在一周内大于一个。
现在我想标记下一行的“sd”列,其中“ft”标志为每个项目的值从1更改为0。
就像在上面的项目“i1”的数据集中一样,“sd”对于行no:5和6是1 对于“i2”,对于行号13和14
,sd为1答案 0 :(得分:1)
对于Teradata,您可以应用窗口聚合函数。这应该为您的示例返回正确的结果,我不知道是否有任何其他规则:
case
when max(ft) -- look for a 1 in the two weeks before the current week
over (partition by itm order by wk
rows between 2 preceding and 1 preceding) = 1
and ft = 0 -- current value must be zero
then 1
else 0
end