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

Oracle SQL:按指定字段匹配填充cod_account字段空值

填充cod_account空值的解决方案

需求明确:仅当cod_agen、cod_sub、no_prod三个字段与同组内前序记录完全匹配时,用前序非空的cod_account值填充当前空值。以下是主流数据库的实现代码:

MySQL 8.0+

SELECT 
    cod_agen,
    cod_sub,
    no_prod,
    LAST_VALUE(cod_account IGNORE NULLS) OVER (
        PARTITION BY cod_agen, cod_sub, no_prod 
        ORDER BY <排序字段> -- 替换为确定记录顺序的字段,如自增id、创建时间
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cod_account
FROM 你的表名;

PostgreSQL

SELECT 
    cod_agen,
    cod_sub,
    no_prod,
    LAST_VALUE(cod_account) OVER (
        PARTITION BY cod_agen, cod_sub, no_prod 
        ORDER BY <排序字段> -- 替换为确定记录顺序的字段
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        IGNORE NULLS
    ) AS cod_account
FROM 你的表名;

SQL Server

2022及以上版本

SELECT 
    cod_agen,
    cod_sub,
    no_prod,
    LAST_VALUE(cod_account IGNORE NULLS) OVER (
        PARTITION BY cod_agen, cod_sub, no_prod 
        ORDER BY <排序字段> -- 替换为确定记录顺序的字段
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cod_account
FROM 你的表名;

旧版本(2022以下)

SELECT 
    cod_agen,
    cod_sub,
    no_prod,
    MAX(cod_account) OVER (
        PARTITION BY cod_agen, cod_sub, no_prod 
        ORDER BY <排序字段> -- 替换为确定记录顺序的字段
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cod_account
FROM 你的表名;

关键注意事项

  • 必须指定排序字段:<排序字段>要选能明确记录先后顺序的字段(比如自增主键、业务时间戳),否则数据库无法判定“前序记录”,结果会混乱。
  • 组内首条记录若cod_account为空,无法被填充(无前置非空值),符合需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:42:24