मॉड्यूल पाठ (3/4)
LAG, लीड और रनिंग योग
LAG और LEAD दो विशेष विंडो फ़ंक्शन हैं जो आपको एक्सेस प्रदान करते हैं
समान विभाजन की अन्य पंक्तियाँ: पिछली पंक्ति (LAG) या
विंडो के ORDER BY के अनुसार अगला (LEAD)। वे हैं
पंक्ति-से-पंक्ति तुलना के लिए गो-टू टूल (डेल्टा, विविधताएं, अंतराल)
और - रनिंग टोटल के लिए SUM/AVG/COUNT OVER के साथ संयुक्त।
LAG: पिछली पंक्ति
LAG(colonna) OVER (PARTITION BY p ORDER BY o)
LAG(colonna, n) OVER (PARTITION BY p ORDER BY o) -- n righe indietro
LAG(colonna, n, default) OVER (PARTITION BY p ORDER BY o) -- default se non c'èउदाहरण: प्रत्येक आदेश के लिए, "पिछले आदेश के बाद से दिन समान हैं ग्राहक":
SELECT id,
customer_id,
ordered_at,
ordered_at - LAG(ordered_at) OVER (
PARTITION BY customer_id ORDER BY ordered_at
) AS since_previous_order
FROM orders
ORDER BY customer_id, ordered_at;प्रत्येक ग्राहक के पहले ऑर्डर में since_previous_order = NULL होता है क्योंकि
विभाजन में कोई "पिछला" नहीं है.
लीड: अगली पंक्ति
LAG का दर्पण. विशिष्ट: "अगली घटना तक का समय", "अंतर
अगले संस्करण के साथ"।
SELECT id, ordered_at,
LEAD(ordered_at) OVER (PARTITION BY customer_id ORDER BY ordered_at)
- ordered_at AS to_next
FROM orders;रनिंग टोटल: OVER के साथ समुच्चय
समग्र कार्य (SUM, AVG, COUNT, MAX, MIN) बन जाते हैं
संचयी जब OVER (… ORDER BY …) के साथ संयुक्त होता है:
SELECT order_id,
total,
SUM(total) OVER (
PARTITION BY customer_id
ORDER BY ordered_at
) AS running_total
FROM …;प्रत्येक पंक्ति के लिए, SUM विभाजन में सभी पंक्तियों के योग की गणना करता है
वह बिंदु, विंडो के ORDER BY के अनुसार। नतीजा यह है
क्लासिक "रनिंग बैलेंस"।
इसे अजमाएं
प्रत्येक ऑर्डर के लिए आईडी, ग्राहक_आईडी, ऑर्डर_एट और एक दिन_फ्रॉम_पिछला कॉलम दिखाएं, जो ऑर्डर_एट द्वारा ऑर्डर किए गए वर्तमान ऑर्डर और उसी ग्राहक के पिछले ऑर्डर के बीच पूरे दिनों की संख्या (फ्लोर के साथ) है। यदि कोई पिछला ऑर्डर नहीं है तो शून्य। ग्राहक_आईडी द्वारा ऑर्डर करें और ऑर्डर_पर करें।
संकेत दिखाएँ
LAG(ordered_at) OVER (PARTITION BY customer_id ORDER BY order_at) ग्राहक के पिछले ऑर्डर का टाइमस्टैम्प लौटाता है। अंतराल प्राप्त करने के लिए घटाएँ, फिर दिनों में बदलें।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
प्रत्येक डिलीवर किए गए ऑर्डर के लिए (स्थिति = 'डिलीवर किया गया'), आईडी, ग्राहक_आईडी, ऑर्डर_एट, ऑर्डर_टोटल (मात्रा का योग * इसकी लाइन आइटम की इकाई_कीमत) और रनिंग_टोटल (ऑर्डर किए गए_एट द्वारा ऑर्डर किए गए प्रति ग्राहक कुल का रनिंग टोटल) दिखाएं। ऑर्डर_टोटल के लिए CTE का उपयोग करें। ग्राहक_आईडी द्वारा ऑर्डर करें और ऑर्डर_पर करें।
संकेत दिखाएँ
सीटीई प्रति ऑर्डर कुल की गणना करता है; SUM OVER समय के साथ प्रति ग्राहक रनिंग टोटल उत्पन्न करता है।
3 प्रयासों के बाद समाधान उपलब्ध है