使用Oracle我需要获取前一个值才能填充列。
我有sealing_id
列和assay_id
列。
我试试:
LAG(sealing_id, 1) OVER (ORDER BY service_id DESC) AS sealing_id
但查询太慢了。
如果我有一个NULL值,如何才能获得密封列的最后一个已知值?
答案 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几乎相当。