首页 > 解决方案 > Db2 LAG 函数可以引用自身吗?

问题描述

我正在尝试通过复制此 Excel 公式来输入信息以识别 GROUP ID:

IF(OR(A2<>A1,AND(B2<>"000",B1="000")),D1+1,D1)

这个公式是在我的光标位于“D2”时编写的,这意味着我已经引用了前一行中新添加的列值来生成当前值。

我想用 Db2 SQL 来做这个,但我不知道怎么做,因为我需要在我要添加的列上执行 LAG 函数并引用它们的值。

在此处输入图像描述

如果有更好的方法,请告知。

谢谢。

标签: sqldb2lag

解决方案


您需要嵌套的 OLAP 函数,假设ORDER BY SERIAL_NUMBER, EVENT_TIMESTAMP返回 Excel 中显示的顺序:

with cte as 
 (
    select ...
       case --IF(OR(A2<>A1,AND(B2<>"000",B1="000"))
         when (lag(OPERATION)
              over (order by SERIAL_NUMBER, EVENT_TIMESTAMP) = '000'
              and OPERATION <> '000')
           or lag(SERIAL_NUMBER,1,'')
              over (order by SERIAL_NUMBER, EVENT_TIMESTAMP) <> SERIAL_NUMBER
         then 1
         else 0
       end as flag -- start of new group
    from tab
 ) 
select ...
   sum(flag)
   over (order by SERIAL_NUMBER, EVENT_TIMESTAMP
         rows unbounded preceding) as GROUP_ID
from cte

推荐阅读