Những gì bạn muốn là lag(ignore nulls)
. Đây là một cách để làm những gì bạn muốn, sử dụng hai chức năng cửa sổ. Đầu tiên xác định nhóm cho NULL
giá trị và giá trị thứ hai chỉ định giá trị:
select idx, value, coalesce(value, max(value) over (partition by grp))
from (select b.*, count(value) over (order by idx) as grp
from base b
) b
order by idx;
Bạn cũng có thể làm điều này mà không cần truy vấn con bằng cách sử dụng mảng. Về cơ bản, lấy phần tử cuối cùng không tính NULL
s:
select idx, value,
(array_remove(array_agg(value) over (order by idx), null))[count(value) over (order by idx)]
from base b
order by idx;
Tại đây là một db <> fiddle.