एसक्यूएल लैग

Esakyu Ela Laiga



SQL लैग() फ़ंक्शन आपको एक विशिष्ट ऑफसेट पर वर्तमान पंक्ति से पिछली पंक्ति तक पहुंचने की अनुमति देता है। संक्षेप में, लैग() फ़ंक्शन आपको वर्तमान पंक्ति से पिछली पंक्ति तक पहुंचने की अनुमति देता है। ऑफसेट मान निर्दिष्ट करके, आप वर्तमान पंक्ति से पिछली 1, 2, 3, आदि पंक्तियों तक पहुंच सकते हैं।

यह लीड() फ़ंक्शन के विपरीत है जो आपको बाद की पंक्तियों तक पहुंचने की अनुमति देता है।







एसक्यूएल लैग()

फ़ंक्शन सिंटैक्स इस प्रकार है:



LAG(मान_अभिव्यक्ति, ऑफसेट [, डिफ़ॉल्ट])
ऊपर (
[विभाजन_अभिव्यक्ति द्वारा विभाजन]
Sort_expression द्वारा ऑर्डर करें [एएससी | डीईएससी]
);

निम्नलिखित समर्थित तर्क हैं:



  • मूल्य_अभिव्यक्ति - यह पिछली पंक्ति का रिटर्न मान निर्दिष्ट करता है। अभिव्यक्ति का मूल्यांकन एक ही मान पर होना चाहिए।
  • ओफ़्सेट - यह निर्दिष्ट करता है कि पहुंच के लिए वर्तमान पंक्ति से कितनी पंक्तियाँ पीछे की ओर हैं।
  • गलती करना - यदि ऑफसेट विभाजन के दायरे से बाहर है तो यह डिफ़ॉल्ट मान सेट करता है। डिफ़ॉल्ट रूप से, मान NULL पर सेट है।
  • द्वारा विभाजन - यह निर्दिष्ट करता है कि डेटा को कैसे विभाजित किया जाए।
  • द्वारा आदेश - यह प्रत्येक विभाजन में पंक्तियों के लिए ऑर्डर प्रारूप निर्धारित करता है।

नमूना डेटा सेटअप

इससे पहले कि हम लैग() फ़ंक्शन के कामकाज में उतरें, आइए प्रदर्शन उद्देश्यों के लिए एक बुनियादी तालिका स्थापित करके शुरुआत करें।





टेबल उत्पाद बनाएं (
product_id INT प्राथमिक कुंजी AUTO_INCREMENT,
उत्पाद_नाम VARCHAR(255),
श्रेणी वर्चर(255),
मूल्य दशमलव(10, 2),
मात्रा INT,
समाप्ति तिथि दिनांक,
बारकोड BIGINT
);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('शेफ हैट 25 सेमी',
'बेकरी',
24.67,
57,
'2023-09-09',
2854509564204);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('बटेर अंडे - डिब्बाबंद',
'पेंट्री',
17.99,
67,
'2023-09-29',
1708039594250);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('कॉफ़ी - एग नॉग कैपुचीनो',
'बेकरी',
92.53,
10,
'2023-09-22',
8704051853058);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('नाशपाती - कांटेदार',
'बेकरी',
65.29,
48,
'2023-08-23',
5174927442238);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('पास्ता - एंजेल हेयर',
'पेंट्री',
48.38,
59,
'2023-08-05',
8008123704782);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('वाइन - प्रोसेको वाल्डोबियाडीन',
'उत्पादन करना',
44.18,
3,
'2023-03-13',
6470981735653);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('पेस्ट्री - फ्रेंच मिनी मिश्रित',
'पेंट्री',
36.73,
52,
'2023-05-29',
5963886298051);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('नारंगी - डिब्बाबंद, मंदारिन',
'उत्पादन करना',
65.0,
1,
'2023-04-20',
6131761721332);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('पोर्क - कंधा',
'उत्पादन करना',
55.55,
73,
'2023-05-01',
9343592107125);

डालना
में
उत्पाद (उत्पाद_नाम,
वर्ग,
कीमत,
मात्रा,
समाप्ति तिथि,
बारकोड)
मान ('डीसी हिकिएज हीरा हुबा',
'उत्पादन करना',
56.29,
53,
'2023-04-14',
3354910667072);

डेटा निर्माण और सेटअप पूरा होने के बाद, आइए कुछ उदाहरणों पर चर्चा करने के लिए आगे बढ़ें।

उदाहरण 1: मूल उपयोग

इस मामले में, हमारे पास 'उत्पाद' तालिका तक पहुंच होती है जिसमें उत्पाद की जानकारी होती है। मान लीजिए हम वर्तमान पंक्ति से पिछला बारकोड प्राप्त करना चाहते हैं।



हम लैग() फ़ंक्शन का उपयोग इस प्रकार कर सकते हैं:

चुनना
प्रोडक्ट का नाम,
कीमत,
लैग (बारकोड) ओवर (श्रेणी के अनुसार विभाजन)।
द्वारा आदेश
मूल्य एएससी) पिछले_आइटम के रूप में
से
उत्पाद पी;

दिया गया कोड श्रेणी के आधार पर डेटा को विभाजित करता है। इसके बाद यह लैग() फ़ंक्शन का उपयोग करके विभाजन में पिछले बारकोड को लाता है।

परिणामी आउटपुट इस प्रकार है:

उदाहरण 2: डिफ़ॉल्ट मान सेट करना

यदि किसी विशिष्ट कॉलम (बाउंड से बाहर) में कोई पिछली पंक्ति नहीं है, तो फ़ंक्शन मान को NULL पर सेट करता है जैसा कि पिछले उदाहरण में दिखाया गया है।

किसी भी आउट-ऑफ़-स्कोप एक्सेस के लिए डिफ़ॉल्ट मान सेट करने के लिए, हम निम्नलिखित कार्य कर सकते हैं:

चुनना
प्रोडक्ट का नाम,
कीमत,
लैग(बारकोड, 1, 'एन/ए') ओवर (श्रेणी के अनुसार विभाजन)।
द्वारा आदेश
मूल्य एएससी) पिछले_आइटम के रूप में
से
उत्पाद पी;

हमने डिफ़ॉल्ट मान को 'एन/ए' पर सेट किया है। इसे किसी भी आउट-ऑफ़-बाउंड मान को प्रतिस्थापित करना चाहिए जैसा कि आउटपुट में दिखाया गया है:

उदाहरण 3: कस्टम ऑफ़सेट मान

मान लीजिए आप वर्तमान पंक्ति से पिछली दो पंक्तियों तक पहुंचना चाहते हैं। हम ऑफसेट मान को 2 पर सेट करके ऐसा कर सकते हैं।

एक उदाहरण क्वेरी निम्नलिखित में चित्रित की गई है:

चुनना
प्रोडक्ट का नाम,
कीमत,
लैग(बारकोड, 2, 'एन/ए') ओवर (श्रेणी के अनुसार विभाजन)।
द्वारा आदेश
मूल्य एएससी) पिछले_आइटम के रूप में
से
उत्पाद पी;

आउटपुट:

यह क्वेरी प्रत्येक विभाजन में पिछली दो पंक्तियाँ लौटाती है।

निष्कर्ष

इस ट्यूटोरियल में, हमने सीखा कि वर्तमान पंक्ति से पिछला आइटम प्राप्त करने के लिए लैग() फ़ंक्शन के साथ कैसे काम करें।