我正在使用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语句创建的表如下所示
有没有更好的方法来达到我所要求的最终结果?
1条答案
按热度按时间nfg76nw01#
在这种情况下,如果当前行具有非空值,则不需要前一个值。所以使用
last_value
与ignore nulls
条款:D小提琴
Last_value()
默认情况下,检查当前行,如果为空,则查找最后一个非空值。