这是我的原始表:

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”,每个项都有八周的数据(w1-w8),“ ft”列的每周值将为(1或0),但在八周中一项的ft列将变为大于一的几周。

现在,我想从“ ft”标志针对每一项将其值从1更改为0的点,为接下来的两行标记“ sd”列。

就像上述数据集“ i1”的数据一样,第5行和第6行的“ sd”为1
对于“ i2”,对于第13行和第14行,sd为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

关于mysql - sql:根据其他列值标记列的后几行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32747523/

10-11 05:15