Teradata数据表NULL值向前填充(Filling forward)实现方法咨询
Teradata向前填充(Last Non-Null填充)实现方法
方法1:LAST_VALUE + IGNORE NULLS(适用于Teradata 14.10及以上版本)
这是最简洁的实现方案,直接通过窗口函数跳过NULL值取最近的非空值:
SELECT EVENT, EVENT_NUM, "WHAT I HAVE", LAST_VALUE("WHAT I HAVE" IGNORE NULLS) OVER ( -- 替换为能确定行先后顺序的列,如事件发生时间、自增ID等,必须指定 ORDER BY 你的排序列 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS "WHAT I WANT" FROM 你的表名;
方法2:分组取最大值(兼容所有Teradata版本)
如果你的Teradata版本较低不支持IGNORE NULLS参数,可以用分组法实现,逻辑稳定通用:
WITH temp AS ( SELECT EVENT, EVENT_NUM, "WHAT I HAVE", -- 统计当前行及之前的非空值数量,作为分组标识 SUM(CASE WHEN "WHAT I HAVE" IS NOT NULL THEN 1 ELSE 0 END) OVER ( ORDER BY 你的排序列 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS fill_group FROM 你的表名 ) SELECT EVENT, EVENT_NUM, "WHAT I HAVE", MAX("WHAT I HAVE") OVER (PARTITION BY fill_group) AS "WHAT I WANT" FROM temp;
注意:两种方法都必须明确指定ORDER BY的排序列,用来确定行的先后顺序,如果你表中没有显式的排序列,可以先给数据添加自增序号作为排序依据,避免因为行顺序不确定导致填充结果错误。
内容的提问来源于stack exchange,提问作者rorymck
相关产品推荐
相关产品推荐

