Co chcete, je lag(ignore nulls)
. Zde je jeden způsob, jak udělat to, co chcete, pomocí dvou funkcí okna. První definuje seskupení pro NULL
hodnoty a druhý přiřadí hodnotu:
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;
Můžete to také provést bez poddotazů pomocí polí. V zásadě vezměte poslední prvek, který nepočítá 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;
Zde je db<>hudlík.