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

PostgreSQL按分组填充空值为组内前序非空值的实现方法

PostgreSQL分组填充NULL为组内前序非空值解决方案

你需要实现的是分组后按日期排序,将NULL值填充为组内之前出现的最后一个非空值,用PostgreSQL的窗口函数可以轻松解决这个问题,具体实现如下:

解决方案SQL

SELECT
  "Date",
  "Group",
  LAST_VALUE("value") OVER (
    PARTITION BY "Group"
    ORDER BY "Date"
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    IGNORE NULLS
  ) AS "value"
FROM X;

代码说明

  • PARTITION BY "Group":按Group字段将数据分组,每个组独立处理填充逻辑
  • ORDER BY "Date":确保组内数据按日期先后顺序排列,保证填充的是之前出现的非空值
  • LAST_VALUE("value") ... IGNORE NULLS:忽略NULL值,提取当前行及之前范围内最后一个非空的value值
  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:限定窗口范围为从组的第一行到当前行,避免提前引用后续行的值

验证示例

输入表X:

DateGroupvalue
1/1/2023ANULL
2/1/2023AKevin
3/1/2023ANULL
4/1/2023ATom
5/1/2023ANULL
6/1/2023ANULL
1/1/2023BSara
2/1/2023BNULL

执行上述SQL后,得到的输出与你期望的一致:

DateGroupvalue
1/1/2023ANULL
2/1/2023AKevin
3/1/2023AKevin
4/1/2023ATom
5/1/2023ATom
6/1/2023ATom
1/1/2023BSara
2/1/2023BSara

注意:Group是PostgreSQL的保留关键字,所以在SQL中必须用双引号"Group"包裹,否则会触发语法错误。

内容的提问来源于stack exchange,提问作者Hoàng Phạm Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:20:27