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

Oracle表值向下填充:非空值覆盖后续空值的SQL查询实现

Oracle 非空值向下填充SQL实现方案

原始表结构

Keyvalues
1null
2value1
3null
4null
5null
6value2
7null
8null

期望结果

Keyvalues
1null
2value1
3value1
4value1
5value1
6value2
7value2
8value2

可以通过Oracle的分析函数快速实现需求,以下是两种可靠方案:

方案1:使用LAST_VALUE分析函数

SELECT 
    "Key",
    LAST_VALUE("values" IGNORE NULLS) OVER (
        ORDER BY "Key" 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS filled_values
FROM your_table_name;

说明:

  • IGNORE NULLS 参数让函数跳过NULL值,只取最近的非空值
  • ORDER BY "Key" 保证按主键顺序处理数据
  • 窗口范围限定为从第一行到当前行,确保每个NULL都填充最近的前置非空值

方案2:分组+MAX()分析函数

WITH grouped_data AS (
    SELECT 
        "Key",
        "values",
        -- 累加非空值次数生成分组ID,每个非空值开启新分组
        SUM(CASE WHEN "values" IS NOT NULL THEN 1 ELSE 0 END) OVER (ORDER BY "Key") AS group_id
    FROM your_table_name
)
SELECT 
    "Key",
    MAX("values") OVER (PARTITION BY group_id) AS filled_values
FROM grouped_data;

说明:

  • 先通过累加逻辑为连续的NULL和前置非空值分配同一个分组ID
  • 在每个分组内取MAX("values")(分组内唯一非空值)实现填充

注意:将上述SQL中的your_table_name替换为你的实际表名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:15:50