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

BigQuery中LAG函数仅返回null的问题排查请求

BigQuery中LAG函数返回全Null的问题解决

你的问题核心出在窗口函数的PARTITION BY子句上:你用PARTITION BY month把每条记录单独划分到一个独立分区,每个分区仅包含一行数据,LAG函数找不到前一行数据,因此所有previous_icount都返回null。

修正后的SQL代码

WITH
  base AS (
    SELECT "2022-11-01" month , 1100 icount union all
    SELECT "2022-10-01" month , 1000 icount union all
    SELECT "2022-09-01" month , 900 icount union all
    SELECT "2022-08-01" month , 800 icount union all
    SELECT "2022-07-01" month , 700 icount union all
    SELECT "2022-06-01" month , 600 icount union all
    SELECT "2022-05-01" month , 500 icount union all
    SELECT "2022-04-01" month , 400 icount
  )
SELECT
  month,
  icount,
  LAG(icount) OVER w1 AS previous_icount
FROM base
WINDOW w1 AS (
  ORDER BY month ASC -- 按月份升序定义窗口内的排序逻辑
)
ORDER BY
  month DESC

执行结果

运行后会得到你预期的输出:

monthicountprevious_icount
2022-11-0111001000
2022-10-011000900
2022-09-01900800
2022-08-01800700
2022-07-01700600
2022-06-01600500
2022-05-01500400
2022-04-01400null

关键说明

  • 移除PARTITION BY month后,所有数据将被纳入同一个窗口分区
  • ORDER BY month ASC定义了窗口内的排序规则,让数据按时间从小到大排列,确保LAG函数能取到当前行的前一行(上一个月)数据
  • 末尾的ORDER BY month DESC仅用于结果展示排序,不影响窗口函数的计算逻辑

内容的提问来源于stack exchange,提问作者João Fonseca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:55:26