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

如何在BigQuery中用上一个非空值填充后续空值行

在BigQuery中用前一个非空值填充Null的解决方案

要实现你需要的将表格中null值替换为上一个非空值的需求,BigQuery的窗口函数LAST_VALUE搭配IGNORE NULLS参数是最直接高效的方案,下面是具体实现步骤:

完整SQL示例

首先我们先模拟你的样本数据,然后写出处理逻辑:

WITH sample_data AS (
  SELECT 'aba' AS person_id, TIMESTAMP('2021-09-10 10:00:00') AS event_time UNION ALL
  SELECT 'finix', TIMESTAMP('2021-09-10 10:30:35') UNION ALL
  SELECT 'walter', TIMESTAMP('2021-09-10 10:35:24') UNION ALL
  SELECT 'cimon', TIMESTAMP('2021-09-10 10:36:48') UNION ALL
  SELECT NULL, NULL UNION ALL
  SELECT NULL, NULL UNION ALL
  SELECT 'abhijit', TIMESTAMP('2021-09-10 11:35:00') UNION ALL
  SELECT 'ankur', TIMESTAMP('2021-09-10 14:30:35')
)
SELECT
  LAST_VALUE(person_id IGNORE NULLS) OVER(
    ORDER BY event_time 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS person_id,
  LAST_VALUE(event_time IGNORE NULLS) OVER(
    ORDER BY event_time 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS event_time
FROM sample_data

关键逻辑解释

  1. LAST_VALUE函数:这个窗口函数用于获取窗口范围内的最后一个值,搭配IGNORE NULLS后,会自动忽略窗口中的null值,只取最近的非空值。
  2. 窗口范围设置:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW指定了窗口范围是从结果集的第一行到当前行,确保我们取的是截至当前行之前的最后一个非空值,而不是整个窗口的最后值。
  3. 排序规则:ORDER BY event_time保证了我们是按照时间顺序来填充null值,完全符合你数据的逻辑顺序。

执行这段SQL后,就能得到你需要的目标表格效果。如果你的实际表不是临时数据,只需要把CTE部分替换成你的真实表名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:42:32