Oracle如果列为NULL,则获取最后的已知值

时间:2016-04-12 19:18:51

标签: oracle

使用Oracle我需要获取前一个值才能填充列。

我有sealing_id列和assay_id列。

我试试:

LAG(sealing_id, 1) OVER (ORDER BY service_id DESC) AS sealing_id

但查询太慢了。

如果我有一个NULL值,如何才能获得密封列的最后一个已知值?

1 个答案:

答案 0 :(得分:1)

使用LAST_VALUE分析函数。 IGNORE NULLS将值保留在以下NULL列中,但不在第一个NULL列中 - 请参阅示例。

create table x as 
select 0 x, NULL y from dual union all
select 1 x, 1 y from dual union all
select 2 x, NULL y from dual union all
select 3 x, 3 y from dual union all
select 4 x, NULL y from dual union all
select 5 x, NULL y from dual union all
select 6 x, 2 y from dual union all
select 7 x, NULL y from dual;

select x, y,
last_value(y ignore nulls) over (order by x) last_y 
from x order by x;

给出

        X          Y     LAST_Y
---------- ---------- ----------
         0                       
         1          1          1 
         2                     1 
         3          3          3 
         4                     3 
         5                     3 
         6          2          2 
         7                     2 

你是对的,这个查询需要排序,它会使结果返回得慢一点。但这与订购栏中的SELECT和ORDER BY几乎相当。