使用UNBOUNDED FOLLOWING时,在窗函数中锚定一个值

时间:2015-10-22 20:31:18

标签: sql db2

我有一些类似的数据:

K1 K2 V1 S1 V2 V3
A  B  C  1  .  .
A  B  D  2  D  F
A  B  D  2  D  Z
A  B  E  3  .  .
A  B  F  4  .  .
A  B  G  5  .  .
A  B  H  6  .  .
A  X  C  1  .  .
A  X  F  4  .  .

我正在尝试确定V2不为空的行(由.表示),如果V3中的值存在于V1的K1&分区内的任何后续行中。 K2。

因此在示例中,第3行将被标记,因为F存在于第5行,但第4行不会被标记,因为没有Z.

我开始时:

SELECT K1, K2, V1, S1, V2, V3,
  SUM(DECODE(V1, V3, 1, 0)) 
    OVER(PARTITION BY K1, K2 ORDER BY S1 RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS F1
FROM table
ORDER BY K1, K2, S1

这里的问题是V1和V3之间DECODE的比较是逐行的。当在窗口函数中向前看时,有没有办法将V3的值“锚定”到CURRENT ROW?

1 个答案:

答案 0 :(得分:0)

为什么不使用普通的旧SQL?

select *
from Table1 as t1
where v2 != '.'
and v3 in (select v1
           from Table1 as t2
           where t2.k1 = t1.k1
           and   t2.k2 = t1.k2
           and   t2.s1 > t1.s1
           )

请参阅此处的小提琴:http://sqlfiddle.com/#!15/c36c2/1