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
执行结果
运行后会得到你预期的输出:
| month | icount | previous_icount |
|---|---|---|
| 2022-11-01 | 1100 | 1000 |
| 2022-10-01 | 1000 | 900 |
| 2022-09-01 | 900 | 800 |
| 2022-08-01 | 800 | 700 |
| 2022-07-01 | 700 | 600 |
| 2022-06-01 | 600 | 500 |
| 2022-05-01 | 500 | 400 |
| 2022-04-01 | 400 | null |
关键说明
- 移除
PARTITION BY month后,所有数据将被纳入同一个窗口分区 ORDER BY month ASC定义了窗口内的排序规则,让数据按时间从小到大排列,确保LAG函数能取到当前行的前一行(上一个月)数据- 末尾的
ORDER BY month DESC仅用于结果展示排序,不影响窗口函数的计算逻辑
内容的提问来源于stack exchange,提问作者João Fonseca
相关产品推荐
相关产品推荐

