首页 > 解决方案 > SQL(Redshift)如何用同一行的前一个非空列值填充稀疏值

问题描述

如何使用 SQL (Redshift) 用先前的非空列值填充空列的值(0 是值)?

示例: tbl是它的名称,包含 25 列、“索引”和最多 24 个句点。(中间省略)

指数 period_1 period_2 period_3 period_24
1 19.8 20.1 0 17.0
2 15.1 0 0 10.3

期望的输出:

指数 period_1 period_2 period_3 period_24
1 19.8 20.1 20.1 17.0
2 15.1 15.1 15.1 10.3

我们如何为每个索引(行)做到这一点?

标签: sqlamazon-web-servicesamazon-redshiftfill

解决方案


您可以使用coalesce()nullif()

select index, period_1,
       coalesce(nullif(period_2, 0), period_1),
       coalesce(nullif(period_3, 0, nullif(period_2, 0), period_1),
       coalesce(nullif(period_4, 0), nullif(period_3, 0, nullif(period_2, 0), period_1),
       . . . 
from t;
   

推荐阅读