如何告诉LAG函数获取最后的“非空”值?

例如,请参见下面的表格,其中我在B和C列上有一些NULL值。
我想用最后一个非null值填充null。我试图通过使用LAG函数来做到这一点,就像这样:

case when B is null then lag (B) over (order by idx) else B end as B,

但是,当我在一行中有两个或多个null时,这种方法就行不通了(请参阅C列第3行的NULL值-我希望它是原始值的0.50)。

知道我该如何实现吗?
(它不必使用LAG功能,欢迎其他任何想法)

一些假设:
  • 行数是动态的;
  • 第一个值将始终为非null;否则为0。
  • 一旦我有一个NULL,直到结尾都是NULL-所以我想用最新值填充它。

  • 谢谢

    sql - LAG函数和NULL-LMLPHP

    最佳答案

    如果它一直为null直到结束,那么可以采取捷径

    declare @b varchar(20) = (select top 1 b from table where b is not null order by id desc);
    declare @c varchar(20) = (select top 1 c from table where c is not null order by id desc);
    select is, isnull(b,@b) as b, insull(c,@c) as c
    from table;
    

    关于sql - LAG函数和NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36837971/

    10-11 02:44
    查看更多