[英]sql: Flag the next few rows of a column based on another column value
这是我的原始表:
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),但是在在8周内,一项的ft列将变为大于1的周数。
现在,我想从“ 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.