必要なのはlag(ignore nulls)
。これは、2つのウィンドウ関数を使用して必要なことを行う1つの方法です。 1つ目は、NULL
のグループ化を定義します 値と2番目の値を割り当てます:
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;
配列を使用して、サブクエリなしでこれを行うこともできます。基本的に、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;
こちら はdb<>フィドルです。