उस तालिका पर विचार करें जो रिकॉर्ड का दौरा करती है
create table visits (
person varchar(10),
ts timestamp,
somevalue varchar(10)
)
इस उदाहरण डेटा पर विचार करें (काउंटर के रूप में सरलीकृत)
ts| person | somevalue
-------------------------
1 | bob |null
2 | bob |null
3 | jim |null
4 | bob | A
5 | bob | null
6 | bob | B
7 | jim | X
8 | jim | Y
9 | jim | null
मैं उस व्यक्ति की सभी भविष्य की यात्राओं के अंतिम गैर-अशक्त व्यक्ति को तब तक आगे ले जाने की कोशिश कर रहा हूं, जब तक कि मूल्य में परिवर्तन नहीं हो जाता (यानी अगला गैर-शून्य) मान।
अपेक्षित परिणाम सेट इस तरह दिखता है:
ts| person | somevalue | carry-forward
-----------------------------------------------
1 | bob |null | null
2 | bob |null | null
3 | jim |null | null
4 | bob | A | A
5 | bob | null | A
6 | bob | B | B
7 | jim | X | X
8 | jim | Y | Y
9 | jim | null | Y
मेरा प्रयास इस तरह दिखता है:
select *,
first_value(somevalue) over (partition by person order by (somevalue is null), ts rows between UNBOUNDED PRECEDING AND current row ) as carry_forward
from visits
order by ts
नोट: (कुछ-कुछ शून्य है) छँटाई के प्रयोजनों के लिए 1 या 0 का मूल्यांकन करता है ताकि मुझे विभाजन में पहला गैर-शून्य मान मिल सके।
उपरोक्त मुझे वह परिणाम नहीं देता जो मैं बाद में देता हूं।
pg_dump
psql आउटपुट में डेटा चिपकाने के बजाय अपने टेस्ट डेटा के लिए पेस्ट कर सकते हैं , और टेबल के लिए स्कीमा?pg_dump -t table -d database
हमें बनाने औरCOPY
आदेशों की आवश्यकता है ।