Redshift PostgreSQL window function - keep most recent non-null value -
यहां मेरा डेटा है:
+ -------- + - ---------- + --------- + ------------ + ---------------- + | यूज़रआईडी | विज़िटडाट | विज़िट आईडी | खरीददारी | LastPurchaseID | + -------- + ------------ + --------- + ------------ + ---- ------------ + | 1234 | 2014-10-03 | 1 | 4 ए 75 | 4 ए 75 | | 1234 | 2014-10-06 | 2 | | 4 ए 75 | | 1234 | 2014-10-07 | 3 | बी 305 | बी 305 | | 1234 | 2014-10-08 | 4 | | बी 305 | | 1234 | 2014-10-09 | 5 | | बी 305 | | 1234 | 2014-10-10 | 6 | बी 305 | बी 305 | | 1234 | 2014-10-10 | 7 | | बी 305 | | 1234 | 2014-10-15 | 8 | | बी 305 | + -------- + ------------ + --------- + ------------ + ---- ------------ + मेरे पास अंतिम खरीदारी नहीं है - यह वही है जो मुझे चाहिए
मुझे लगता है कि मुझे विंडो फ़ंक्शंस का उपयोग करना पड़ता है, लेकिन मुझे यकीन नहीं है कि यह हाल के गैर-रिक्त मान को रखने के लिए कैसे मिलेगा, भले ही सबसे हालिया गैर-रिक्त मान कई पंक्तियों से पहले हो।
उदाहरण के लिए, मैंने ऐसा कुछ करने की कोशिश की:
का चयन करें UserID, VisitDate, VisitID, PurchaseID, LAG (TRIM (PurchaseID)) IGNORE NULLS ओवर (उपयोगकर्ता ID, VisitDate द्वारा) TheTable से LastPurchaseID ; लेकिन यह केवल देता है:
+ -------- + ------------ + - -------- + ------------ + ---------------- + | यूज़रआईडी | विज़िटडाट | विज़िट आईडी | खरीददारी | LastPurchaseID | + -------- + ------------ + --------- + ------------ + ---- ------------ + | 1234 | 2014-10-03 | 1 | 4 ए 75 | 4 ए 75 | | 1234 | 2014-10-06 | 2 | | 4 ए 75 | | 1234 | 2014-10-07 | 3 | बी 305 | बी 305 | | 1234 | 2014-10-08 | 4 | | बी 305 | | 1234 | 2014-10-09 | 5 | | | | 1234 | 2014-10-10 | 6 | बी 305 | बी 305 | | 1234 | 2014-10-10 | 7 | | बी 305 | | 1234 | 2014-10-15 | 8 | | | + -------- + ------------ + --------- + ------------ + ---- ------------ + क्या विंडो फ़ंक्शन का उपयोग करने का कोई तरीका है "सबसे हाल ही में रखें, यदि यह रिक्त है, मान लें कि यह नहीं है पिछले गैर-शून्य मान से बदला "?
मुझे अंत में मिल गया, इसके बारे में क्षमा करें यह कुछ हद तक अनोखी स्थिति में किसी और के लिए, ऐसा हो रहा था:
चूंकि खरीदआईडी मेरे मामले में एक स्ट्रिंग थी, मैं उस केस पर विचार नहीं कर रहा था जहां खरीददारी एक खाली स्ट्रिंग (या सिर्फ एक जगह थी, जो ट्रिम () रिक्त स्ट्रिंग में बदल गई थी), जो रिक्त नहीं है।
तब से मैंने तय किया है कार्य जो तालिका में सम्मिलित होने से इसे रोकने के लिए रोकता है, और निम्नतम को LastPurchaseID लॉजिक में भी बदल दिया है:
SELECT LAG (मामले में लेंस (TRIM (PurchaseID)) = 0 तो नल ELSE TRIM (खरीदइंड) END) IGNORE NULLS ओवर (यूजरआइड, विज़िट डेट द्वारा क्रम) TheTable से LastPurchaseID;
Comments
Post a Comment