You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LAG函数的IIF条件中引用当前行进行判断?

解决方案:在LAG函数条件中引用当前行

你需要在LAG函数的判断逻辑里,对比当前行的F2与滞后12行的F2,满足条件时取滞后行的F1,否则返回0。原写法的问题在于,你在IIF中错误地将滞后行的F2与自身对比,而非当前行的F2。

正确写法(IIF版本)

select ...,
(
    source.F1 - 
    IIF(LAG(source.F2, 12) OVER (...) = source.F2, LAG(source.F1, 12) OVER (...), 0)
) as alias
from source

更通用的CASE版本(兼容多数SQL方言)

select ...,
(
    source.F1 - 
    CASE
        WHEN LAG(source.F2, 12) OVER (...) = source.F2
        THEN LAG(source.F1, 12) OVER (...)
        ELSE 0
    END
) as alias
from source

逻辑说明

  • LAG(source.F2, 12) OVER (...):获取分区内当前行之前第12行的F2值
  • source.F2:直接引用当前行的F2值
  • 当两者相等时,取滞后12行的F1;否则返回0,最终用当前行F1减去该结果得到alias

兼容无滞后行的场景(可选)

如果希望当滞后12行不存在时(比如结果集前12行),保持原查询默认返回当前行F1的逻辑,可以用COALESCE处理:

select ...,
(
    source.F1 - 
    IIF(COALESCE(LAG(source.F2, 12) OVER (...), source.F2) = source.F2, 
        COALESCE(LAG(source.F1, 12) OVER (...), source.F1), 
        0)
) as alias
from source

内容的提问来源于stack exchange,提问作者Anton Putau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:31:25