संख्या और तारीख की श्रृंखलाएँ बनाना
गैप भरने और कैलेंडर बनाने के लिए recursion से SEQUENCE बनाएँ
संख्या और तारीख की श्रृंखलाएँ बनाना, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पदानुक्रम के बिना पुनरावृत्ति
पुनरावर्ती CTE केवल वृक्षों के लिए नहीं होते। इनका दूसरा प्रमुख उपयोग क्रम बनाना है: संख्याओं का क्रम या किसी सीमा की प्रत्येक तारीख। साक्षात्कारकर्ता यह तब पूछते हैं जब किसी समस्या में रिक्तियाँ भरने की आवश्यकता हो — यानी ऐसी पंक्तियाँ बनानी हों जो किसी तालिका में मौजूद नहीं हैं।
प्रचलित प्रश्न यह होता है: "महीने के लिए प्रतिदिन की बिक्री दिखाइए, जिसमें शून्य बिक्री वाले दिन भी शामिल हों।" आप किसी अनुपस्थित दिन को तब तक नहीं दिखा सकते, जब तक पहले सभी दिन बना न लें।
सरल संख्या-श्रेणी
आधार भाग पहली संख्या देता है; पुनरावर्ती भाग हर चरण में एक जोड़ता है; पुनरावर्ती भाग में मौजूद WHERE इसे रोक देता है। इससे 1 से 10 तक की संख्याएँ बनती हैं।
WITH RECURSIVE nums AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM nums WHERE n < 10
)
SELECT n FROM nums;समापन-शर्त
संगठन-चार्ट के विपरीत, संख्या-श्रेणी को रोकने के लिए कोई प्राकृतिक अंतिम पत्ता नहीं होता — आप संख्याएँ अनंत तक बढ़ा सकते हैं। इसलिए पुनरावर्ती भाग में रोकने की स्पष्ट शर्त जोड़ना आवश्यक है: WHERE n < 10।
जब n का मान 10 तक पहुँचता है, तो अगले चरण का WHERE एकमात्र संभावित पंक्ति को भी छाँट देता है, पुनरावर्ती भाग कुछ नहीं लौटाता और पुनरावृत्ति रुक जाती है। इस सुरक्षा-शर्त को भूलना साक्षात्कारों में अनियंत्रित पुनरावृत्ति का सबसे आम कारण है।
सीमा को पैरामीटर बनाना
सीमा को किसी मान या चर से नियंत्रित करके श्रेणी को लचीला बनाइए। यहाँ हम 1 से N तक बनाते हैं, जहाँ N दिया जाता है। यही ढाँचा 0-आधारित या चरणबद्ध श्रेणियाँ भी बनाता है — बस आधार मान और वृद्धि बदल दीजिए।
WITH RECURSIVE nums AS (
SELECT 1 AS n
UNION ALL
SELECT n + 2 FROM nums WHERE n + 2 <= 99
)
SELECT n FROM nums; -- odd numbers 1,3,5,...,99दिनांक-श्रेणी बनाना
पूर्णांक गणना की जगह दिनांक गणना अपनाइए और आपको कैलेंडर मिल जाएगा। आधार भाग आरंभिक दिनांक होता है; पुनरावर्ती भाग अंतिम दिनांक से आगे निकलने तक एक दिन जोड़ता है।
एक दिन जोड़ने का वाक्य-विन्यास अलग-अलग SQL बोलियों में अलग होता है — यहाँ पोस्टग्रेज़ शैली का रूप अंतराल का उपयोग करता है।
WITH RECURSIVE cal AS (
SELECT DATE '2024-01-01' AS d
UNION ALL
SELECT d + INTERVAL '1 day'
FROM cal
WHERE d < DATE '2024-01-31'
)
SELECT d FROM cal;LEFT JOIN से रिक्तियाँ भरना
अब कैलेंडर को वास्तविक डेटा के साथ मिलाइए। हर दिन बनाइए, फिर बिक्री तालिका पर LEFT JOIN लगाइए, ताकि अनुपस्थित दिन NULL के साथ दिखाई दें और COALESCE से उन्हें 0 में बदला जा सके।
यह दो-चरणीय तरीका — पहले आधार-श्रृंखला बनाना, फिर तथ्यों पर बायाँ-जोड़ लगाना — रिक्तियाँ भरने वाले हर उत्तर का मूल है।
WITH RECURSIVE cal AS (
SELECT DATE '2024-01-01' AS d
UNION ALL
SELECT d + INTERVAL '1 day' FROM cal
WHERE d < DATE '2024-01-07'
)
SELECT cal.d, COALESCE(SUM(s.amount), 0) AS total
FROM cal
LEFT JOIN sales s ON s.sale_date = cal.d
GROUP BY cal.d
ORDER BY cal.d;मासिक और साप्ताहिक आधार-श्रृंखलाएँ
अधिक मोटे कैलेंडर बनाने के लिए वृद्धि बदल दीजिए। मासिक आधार-श्रृंखला के लिए INTERVAL '1 month' या साप्ताहिक आधार-श्रृंखला के लिए INTERVAL '7 day' जोड़िए। यह तब उपयोगी है जब साक्षात्कारकर्ता ऐसा मासिक विवरण माँगे जिसमें खाली महीने भी शामिल हों।
WITH RECURSIVE months AS (
SELECT DATE '2024-01-01' AS m
UNION ALL
SELECT m + INTERVAL '1 month' FROM months
WHERE m < DATE '2024-12-01'
)
SELECT m FROM months;दिनांक गणना में SQL-बोली के अंतर
इन क्वेरियों का सबसे कम पोर्टेबल भाग दिनांक गणना है। इनके रूप जानिए:
- पोस्टग्रेज़:
d + INTERVAL '1 day'। - MySQL:
DATE_ADD(d, INTERVAL 1 DAY)। - एसक्यूएल सर्वर:
DATEADD(DAY, 1, d)। - एसक्यूएलाइट:
date(d, '+1 day')।
यह बताना कि पुनरावृत्ति की संरचना एक जैसी रहती है और केवल दिनांक फ़ंक्शन बदलता है, SQL-बोली की अच्छी समझ वाला मजबूत उत्तर होता है।
पुनरावृत्ति बनाम क्रम-श्रेणी निर्माण
पोस्टग्रेज़ में पहले से मौजूद generate_series() संख्याएँ या दिनांक पुनरावृत्ति के बिना बनाता है, और यह अधिक तेज़ तथा स्पष्ट है:
SELECT generate_series(DATE '2024-01-01', DATE '2024-01-31', INTERVAL '1 day');
यदि साक्षात्कारकर्ता का डेटाबेस इसका समर्थन करता है, तो इसे प्राथमिकता दीजिए। लेकिन कई डेटाबेस इंजन (MySQL और हाल के संस्करणों से पहले के एसक्यूएल सर्वर) में यह सुविधा नहीं होती — ऐसे में पुनरावर्ती CTE ही सर्वत्र चलने वाला वैकल्पिक उपाय है।
पुनरावृत्ति सीमा पर ध्यान दें
बड़ी श्रेणी बनाते समय इंजन की पुनरावृत्ति सीमा आड़े आ सकती है। एसक्यूएल सर्वर में डिफ़ॉल्ट सीमा MAXRECURSION 100 है, इसलिए 365 दिनों का कैलेंडर विफल हो जाता है, जब तक आप सीमा हटाने के लिए अंत में OPTION (MAXRECURSION 0) न जोड़ें।
पोस्टग्रेज़ में कोई निश्चित सीमा नहीं है, लेकिन गलत समापन-शर्त वाली अनियंत्रित श्रेणी स्मृति समाप्त होने तक चल सकती है। विस्तार करने से पहले हमेशा जाँच लें कि आपकी समापन-शर्त सही है।
-- SQL Server: lift the 100-row recursion cap
-- ...recursive CTE here...
SELECT * FROM cal
OPTION (MAXRECURSION 0);श्रेणी पर CROSS JOIN लगाना
बनाई गई श्रेणी अक्सर केवल एक घटक होती है। जब आपके पास संख्याओं वाला CTE हो, तो पंक्तियों का विस्तार करने के लिए उस पर CROSS JOIN लगाइए — उदाहरण के लिए, हर ऑर्डर-पंक्ति को उसकी मात्रा के अनुसार दोहराने या हर ग्राहक के लिए दिनांक-सीमा फैलाने के लिए।
यह समझना कि पुनरावृत्ति केवल अंतिम उत्तर नहीं, बल्कि दोबारा उपयोग किया जा सकने वाला निर्माण-खंड बनाती है, रटे-रटाए उत्तर और सधे हुए साक्षात्कार-उत्तर के बीच का अंतर है।
WITH RECURSIVE nums AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM nums WHERE n < 10
)
SELECT o.order_id, nums.n AS unit
FROM orders o
JOIN nums ON nums.n <= o.quantity;त्वरित जाँच
संख्या या दिनांक-श्रेणी में रोकने की शर्त महत्वपूर्ण क्यों है?
पुनरावलोकन
पुनरावृत्ति ऐसी पंक्तियाँ बना सकती है जो किसी तालिका में मौजूद नहीं हैं:
- पहला मान आधार भाग में दीजिए और पुनरावर्ती भाग में वृद्धि कीजिए।
- हमेशा स्पष्ट समापन-शर्त जोड़िए — श्रेणियों का कोई प्राकृतिक अंत नहीं होता।
- दिनांक/संख्या की आधार-श्रृंखला बनाइए, फिर तथ्यों पर
LEFT JOINलगाकर रिक्तियाँ भरने के लिएCOALESCEका उपयोग कीजिए। - जहाँ उपलब्ध हो वहाँ
generate_seriesको प्राथमिकता दीजिए; एसक्यूएल सर्वर मेंMAXRECURSIONका ध्यान रखिए।
आगे: वे सुरक्षा तकनीकें जो पुनरावृत्ति को अनियंत्रित रूप से चलने से रोकती हैं।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “संख्या और तारीख की श्रृंखलाएँ बनाना” पाठ निःशुल्क है?
हाँ—“संख्या और तारीख की श्रृंखलाएँ बनाना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“संख्या और तारीख की श्रृंखलाएँ बनाना” में मैं क्या सीखूँगा?
गैप भरने और कैलेंडर बनाने के लिए recursion से SEQUENCE बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“संख्या और तारीख की श्रृंखलाएँ बनाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Anchor और Recursive सदस्य
- संगठनात्मक चार्ट में आगे बढ़ना
- संख्या और तारीख की श्रृंखलाएँ बनाना
- अनंत recursion से बचना