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
相关产品推荐
相关产品推荐

