Oracle में एक तालिका में अनुक्रम अंतराल ढूँढना
समस्याआप अपने डेटा में संख्याओं के क्रम में या दिनांक और समय में सभी अंतरालों को खोजना चाहते हैं। अंतराल
दी गई कार्रवाई के लिए रिकॉर्ड की गई तारीखों में हो सकता है, या तार्किक रूप से लगातार प्रकृति वाले कुछ अन्य डेटा में हो सकता है।
समाधान
Oracle के LAG और LEAD OLAP फ़ंक्शन आपको परिणामों की वर्तमान पंक्ति की तुलना करने देते हैं पिछली पंक्ति के साथ।
एलएजी का सामान्य प्रारूप इस तरह दिखता है
लैग (कॉलम या एक्सप्रेशन, पिछली पंक्ति ऑफ़सेट, पहली पंक्ति के लिए डिफ़ॉल्ट)
कॉलम या एक्सप्रेशन की तुलना की जाने वाली वैल्यू है अंतराल (पूर्ववर्ती) मूल्यों के साथ। पूर्ववर्ती
पंक्ति ऑफ़सेट इंगित करता है कि LAG को वर्तमान पंक्ति से पहले कितनी पंक्तियों के विरुद्ध कार्य करना चाहिए। हमने
निम्न सूची में '1' का उपयोग किया है जिसका अर्थ वर्तमान पंक्ति से पहले की पंक्ति से है। LAG के लिए डिफ़ॉल्ट इंगित करता है कि पहली पंक्ति के लिए उदाहरण के रूप में क्या
मान का उपयोग करना है, क्योंकि तालिका या परिणाम में कोई पंक्ति शून्य नहीं है। हम Oracle
को डिफ़ॉल्ट एंकर मान के रूप में 0 का उपयोग करने का निर्देश देते हैं, उस मामले को संभालने के लिए जहां हम
महीने के पहले दिन की तलाश करते हैं।
विद क्वेरी उपनाम दृष्टिकोण का उपयोग किया जा सकता है लगभग सभी स्थितियों में जहां सबक्वेरी का उपयोग किया जाता है,
मुख्य क्वेरी के आगे सबक्वेरी विवरण को स्थानांतरित करने के लिए। यह कोड की पठनीयता और रीफैक्टरिंग में सहायता करता है यदि
बाद की तारीख में आवश्यक हो।
यह नुस्खा उन दिनों के अनुक्रम में अंतराल की तलाश करता है जिन पर महीने के लिए आदेश दिए गए थे
नवंबर 1999:
बिक्री के दिनों के साथ
(सेलेक्ट एक्सट्रेक्ट(ऑर्डर_डेट से दिन) नेक्स्ट_सेल,
लैग (एक्सट्रैक्ट (ऑर्डर_डेट से दिन),1,0)
ओवर (एक्सट्रेक्ट द्वारा ऑर्डर (ऑर्डर_डेट से दिन)) prev_sale
oe.orders से
जहां '01-NOV-1999' और '30-NOV-1999' के बीच order_date)
prev_sale चुनें, next_sale
बिक्री के दिनों से
जहां next_sale - prev_sale> 1
prev_sale द्वारा आदेश;
हमारी क्वेरी नवंबर 1999 के महीने की बिक्री के बीच के दिनों में अंतराल को उजागर करती है।
PREV_SALE NEXT_SALE
---------- ----------
1 10
10 14
15 19
20 22
परिणाम बताते हैं कि महीने की पहली तारीख को एक आदेश दर्ज किए जाने के बाद, बाद में कोई भी आदेश 10 तारीख तक दर्ज नहीं किया गया था। फिर चार दिन का अंतराल 14 वें स्थान पर रहा, और इसी तरह। एक चतुर बिक्री प्रबंधक
इस डेटा का उपयोग यह पूछने के लिए कर सकता है कि उन अंतराल दिनों में बिक्री टीम क्या कर रही थी, और कोई आदेश क्यों नहीं आया
अंदर आया!