这是我的原始表:
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/