繁体   English   中英

sql:根据另一个列值标记列的后几行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM