आप जो चाहते हैं वह है lag(ignore nulls) . दो विंडो फ़ंक्शंस का उपयोग करके आप जो चाहते हैं उसे करने का एक तरीका यहां दिया गया है। पहला समूह को NULL . के लिए परिभाषित करता है मान और दूसरा मान निर्दिष्ट करता है:
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 रों:
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;
यहां एक डीबी<>बेला है।