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

时间:2015-09-23 19:03:40

标签: mysql teradata

这是我的原始表:

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

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