मुझे यह उत्तर SQL सर्वर के लिए मिला जो पोस्टग्रेज़ में भी काम करता है। इसे पहले कभी नहीं करने के बाद, मुझे लगा कि तकनीक काफी चतुर है। मूल रूप से, वह नेस्टेड क्वेरी के अंदर एक केस स्टेटमेंट का उपयोग करके विंडोिंग फ़ंक्शन के लिए एक कस्टम विभाजन बनाता है जो एक योग को बढ़ाता है जब मान शून्य नहीं होता है और इसे अकेला छोड़ देता है। यह प्रत्येक नल अनुभाग को पिछले गैर-शून्य मान के समान संख्या के साथ चित्रित करने की अनुमति देता है। ये रही क्वेरी:
SELECT
id, value, value_partition, first_value(value) over (partition by value_partition order by id)
FROM (
SELECT
id,
value,
sum(case when value is null then 0 else 1 end) over (order by id) as value_partition
FROM p
ORDER BY id ASC
) as q
और परिणाम:
id | value | value_partition | first_value
----+-------+-----------------+-------------
1 | 100 | 1 | 100
2 | | 1 | 100
3 | | 1 | 100
4 | | 1 | 100
5 | | 1 | 100
6 | | 1 | 100
7 | | 1 | 100
8 | 200 | 2 | 200
9 | | 2 | 200
(9 rows)