对于同一列上的多次迭代,有没有一种简单的方法可以使用lag函数?

mi7gmzs6  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(384)

我正在使用impala(但在oraclesql中也可以这样做),我有一个列,需要用每个商品的前一个非空值填充该列的空值(即使之前是25行)。
我写了一个查询,可以让我到我的最终结果,但我需要写30个case-when语句(多达一个月的天)。有更简单的方法吗?
我将lag函数用于,但只能通过获取列的前一个值来实现。如果该值为null,则必须对刚刚创建的新列重新执行lag函数

select a.*, 
case when new_value  is null then LAG (new_value,1) OVER ( partition by merchandise ORDER BY date_mec) else new_value end as new_value_2 
from
(SELECT merchandise, date_mec, value,
case when value is null then LAG (value,1) OVER ( partition by merchandise ORDER BY date_mec) else value end AS new_value 
FROM mer_try_value) a

我的table看起来像这样

我用2个case when语句创建的表如下所示

有没有更好的方法来达到我所要求的最终结果?

nfg76nw0

nfg76nw01#

在这种情况下,如果当前行具有非空值,则不需要前一个值。所以使用 last_valueignore nulls 条款:

select merchandise, date_mec, value,
       last_value(value) ignore nulls over (partition by merchandise order by date_mec) new_val
  from mer_try_value

D小提琴 Last_value() 默认情况下,检查当前行,如果为空,则查找最后一个非空值。

相关问题