कोडिंग साक्षात्कार की तैयारी · पाठ

आस-पास की ROW के लिए LAG और LEAD

SELF JOIN के बिना पिछली और अगली ROW के मान प्राप्त करें

पाठ 1, कुल 4 में से13 चरण

आस-पास की ROW के लिए LAG और LEAD, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

साक्षात्कारकर्ता का प्रश्न

विश्लेषक के साक्षात्कार में सबसे आम प्रश्नों में से एक है: "स्वयं-जोड़ के बिना हर पंक्ति की तुलना उससे पहले वाली पंक्ति से कीजिए।" माह-दर-माह आय, उपयोगकर्ता का पिछला लॉगिन या किसी क्रम की अगली घटना के बारे में सोचिए।

इसका साफ़ उत्तर LAG और LEAD विंडो फ़ंक्शन हैं। इनके माध्यम से हर विवरण वाली पंक्ति को बनाए रखते हुए एक पंक्ति दूसरी पंक्ति के मान को देख सकती है। इस पाठ में आप यह स्पष्ट मानसिक समझ बनाएँगे कि ये आस-पास की पंक्तियों में आगे-पीछे कैसे जाते हैं।

LAG और LEAD क्या करते हैं

LAG(col) col का मान पिछली पंक्ति से लौटाता है। LEAD(col) अगली पंक्ति का मान लौटाता है। "पिछली" और "अगली" पूरी तरह OVER क्लॉज़ के भीतर दिए गए ORDER BY से तय होते हैं।

  • LAG पीछे की ओर देखता है।
  • LEAD आगे की ओर देखता है।

दोनों विस्थापन-वाले विंडो फ़ंक्शन हैं: ये पंक्तियों को कभी समेटते नहीं, केवल पड़ोसी पंक्ति का मान वर्तमान पंक्ति से जोड़ते हैं।

LAG का मूल वाक्य-विन्यास

यह इसका मानक रूप है। हमारे पास sales तालिका है जिसमें month और revenue हैं। हम चाहते हैं कि हर पंक्ति में पिछले महीने की आय भी दिखाई दे।

OVER (ORDER BY month) इंजन को बताता है कि "पिछली" पंक्ति कैसे तय करनी है। पहली पंक्ति का कोई पूर्ववर्ती नहीं होता, इसलिए वहाँ prev_revenue का मान NULL होता है।

SELECT
  month,
  revenue,
  LAG(revenue) OVER (ORDER BY month) AS prev_revenue
FROM sales
ORDER BY month;

परिणाम पढ़ना

यदि डेटा 2024-01 = 100, 2024-02 = 130, 2024-03 = 120 हो, तो क्वेरी यह लौटाती है:

  • जनवरी: आय 100, पिछली_आय NULL
  • फ़रवरी: आय 130, पिछली_आय 100
  • मार्च: आय 120, पिछली_आय 130

हर पंक्ति ने क्रमबद्ध समूह में ठीक अपने ऊपर वाली पंक्ति से मान लिया। न स्वयं-जोड़, न सबक्वेरी, न पंक्तियों का नुकसान।

LEAD आगे की ओर देखता है

LEAD इसका उल्टा है। इसका उपयोग तब कीजिए जब किसी पंक्ति को जानना हो कि आगे क्या आता है, जैसे ऑर्डरों के बीच का समय निकालने के लिए अगली खरीदारी की तारीख।

क्रमबद्ध समूह की अंतिम पंक्ति का कोई उत्तरवर्ती नहीं होता, इसलिए उसके LEAD परिणाम का मान NULL होता है।

SELECT
  month,
  revenue,
  LEAD(revenue) OVER (ORDER BY month) AS next_revenue
FROM sales
ORDER BY month;

विस्थापन तर्क

दोनों फ़ंक्शन एक वैकल्पिक दूसरा तर्क लेते हैं: कितनी पंक्तियाँ आगे या पीछे जाना है। LAG(col, 2) दो पंक्तियाँ पीछे जाता है और LEAD(col, 3) तीन पंक्तियाँ आगे जाता है।

साक्षात्कारकर्ता इसका उपयोग "दो महीने पहले की आय" या "तीन पंक्तियाँ नीचे का मान" जैसे प्रश्न पूछने के लिए करते हैं। डिफ़ॉल्ट दूरी 1 होती है।

SELECT
  month,
  revenue,
  LAG(revenue, 2) OVER (ORDER BY month) AS revenue_2_months_ago
FROM sales
ORDER BY month;

डिफ़ॉल्ट मान का तर्क

तीसरा तर्क तब प्रतिस्थापन मान देता है जब कोई पड़ोसी पंक्ति न हो, ताकि NULL न मिले। इसका रूप है LAG(col, offset, default)।

यह तब उपयोगी होता है जब आगे की गणना NULL स्वीकार न कर सके, जैसे अनुपलब्ध पिछले मान को 0 मानना ताकि अंतर की गणना फिर भी हो सके।

SELECT
  month,
  revenue,
  LAG(revenue, 1, 0) OVER (ORDER BY month) AS prev_revenue
FROM sales
ORDER BY month;

PARTITION BY विंडो को फिर से शुरू करता है

वास्तविक डेटा में शायद ही कभी एक ही वैश्विक क्रम होता है। आमतौर पर आप हर ग्राहक, उत्पाद या क्षेत्र के भीतर तुलना करते हैं। PARTITION BY हर विभाजन की शुरुआत में LAG/LEAD की गणना फिर से शुरू करता है।

इसका अर्थ है कि हर विभाजन की पहली पंक्ति को LAG से NULL मिलता है; किसी दूसरे ग्राहक के डेटा की सीमा पार करके कोई मान नहीं आता।

SELECT
  customer_id,
  order_date,
  amount,
  LAG(amount) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
  ) AS prev_amount
FROM orders;

हल किया हुआ उदाहरण: ऑर्डरों के बीच दिनों की संख्या

एक सामान्य कार्य ग्राहक के लगातार ऑर्डरों के बीच का अंतर मापना है। LAG से पिछले ऑर्डर की तारीख निकालिए, फिर घटाइए।

प्रत्येक ग्राहक के पहले ऑर्डर के लिए NULL मिलता है, क्योंकि घटाने के लिए कोई पिछली तारीख नहीं होती। यह बिल्कुल वही प्रकार की प्रत्येक-ग्राहक तुलना है जिसे विंडो फ़ंक्शन हल करने के लिए बनाए गए हैं और जिसकी साक्षात्कारकर्ता अपेक्षा करते हैं।

SELECT
  customer_id,
  order_date,
  order_date - LAG(order_date) OVER (
    PARTITION BY customer_id
    ORDER BY order_date
  ) AS days_since_prev
FROM orders;

स्वयं-जोड़ क्यों नहीं?

विंडो फ़ंक्शन से पहले का उत्तर सहसंबद्ध स्वयं-जोड़ था: तालिका को उसी तालिका से इस आधार पर जोड़ना कि “इस तारीख से छोटी तारीखों में सबसे बड़ी तारीख वाली पंक्ति” कौन-सी है। यह काम करता है, लेकिन बहुत लंबा होता है, समान तारीखों के मामलों में त्रुटिप्रवण होता है और अक्सर धीमा भी होता है।

  • LAG/LEAD एक ही पंक्ति में आशय स्पष्ट करते हैं।
  • उनका मूल्यांकन एक ही क्रमबद्ध चरण में होता है।
  • आपके ORDER BY से समान मानों का निपटारा नियत रूप से होता है।

“मैं स्वयं-जोड़ की जगह LAG का उपयोग करूँगा” कहना आपकी दक्षता दर्शाता है।

<code>ORDER BY</code> न होने की आम गलती

OVER खंड में ORDER BY के बिना “पिछली पंक्ति” अपरिभाषित होती है। कुछ डेटाबेस सिस्टम इसे अस्वीकार कर देते हैं, जबकि अन्य अप्रत्याशित परिणाम देते हैं। विंडो को हमेशा क्रमबद्ध कीजिए।

यह भी याद रखिए कि OVER के अंदर का क्रम क्वेरी के बाहरी ORDER BY से स्वतंत्र होता है। विंडो यह तय करती है कि पड़ोसी पंक्ति कौन-सी है; बाहरी खंड केवल दिखाने का क्रम तय करता है।

त्वरित जाँच

ऑफ़सेट विंडो फ़ंक्शन की अपनी समझ जाँचिए।

पुनरावलोकन

अब आप ऑफ़सेट विंडो फ़ंक्शन जानते हैं:

  • LAG(col) पिछली पंक्ति पढ़ता है और LEAD(col) अगली पंक्ति पढ़ता है; यह क्रम विंडो के ORDER BY से तय होता है।
  • वैकल्पिक तर्क: LAG(col, offset, default)।
  • PARTITION BY प्रत्येक समूह के लिए नेविगेशन को फिर से शुरू करता है, इसलिए सीमा वाली पंक्तियाँ NULL होती हैं।
  • ये पास-पास की पंक्तियों की तुलना के लिए जटिल स्वयं-जोड़ों की जगह लेते हैं।

अगले भाग में हम इसे उस निश्चित विश्लेषक प्रश्न पर लागू करेंगे: अवधि-दर-अवधि बदलाव।

शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “आस-पास की ROW के लिए LAG और LEAD” पाठ निःशुल्क है?

हाँ—“आस-पास की ROW के लिए LAG और LEAD” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“आस-पास की ROW के लिए LAG और LEAD” में मैं क्या सीखूँगा?

SELF JOIN के बिना पिछली और अगली ROW के मान प्राप्त करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“आस-पास की ROW के लिए LAG और LEAD” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. आस-पास की ROW के लिए LAG और LEAD
  2. अवधि-दर-अवधि परिवर्तन
  3. बकेट बनाने के लिए NTILE
  4. FIRST_VALUE, LAST_VALUE और फ़्रेम की सीमाएँ
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ