sql - Db2 LAG 函数可以引用自身吗?
问题描述
我正在尝试通过复制此 Excel 公式来输入信息以识别 GROUP ID:
IF(OR(A2<>A1,AND(B2<>"000",B1="000")),D1+1,D1)
这个公式是在我的光标位于“D2”时编写的,这意味着我已经引用了前一行中新添加的列值来生成当前值。
我想用 Db2 SQL 来做这个,但我不知道怎么做,因为我需要在我要添加的列上执行 LAG 函数并引用它们的值。
如果有更好的方法,请告知。
谢谢。
解决方案
您需要嵌套的 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