Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle तेजी से ओवरलैप चेक

मुझे यकीन नहीं है कि आप यह करना चाहते हैं:

  1. जांचें कि क्या आप जिस पंक्ति को सम्मिलित करने जा रहे हैं, वह कुछ मौजूदा पंक्तियों के साथ ओवरलैप करती है, या
  2. सभी मौजूदा पंक्तियों में खोजें और ओवरलैप होने वाली पंक्तियों की पहचान करें?

यदि (1), तो आप अनिवार्य रूप से पहले से क्या कर रहे हैं...

SELECT *
FROM YOUR_TABLE
WHERE :inputEnd > beginRange AND :inputStart < endRange;

...आपको ओवरलैप देगा और बहुत अच्छा प्रदर्शन करने वाला होना चाहिए, बशर्ते आपके पास एक समग्र अनुक्रमणिका हो जिसके घटक विपरीत में हों निर्देश:{beginRange ASC, endRange DESC}

यदि (2), तो आप इस तरह विंडोिंग का उपयोग कर सकते हैं:

SELECT *
FROM (
    SELECT
        YOUR_TABLE.*,
        LEAD(beginRange) OVER (ORDER BY beginRange) nextBeginRange
    FROM YOUR_TABLE
)
WHERE endRange > nextBeginRange;

यह आपको प्रत्येक श्रेणी देगा जो इसकी अगली श्रेणी के साथ ओवरलैप होती है (जहां "अगला" का अर्थ beginRange के संदर्भ में परिभाषित किया गया है आदेश देना)।

कड़ाई से, इसके लिए एक समग्र अनुक्रमणिका की भी आवश्यकता नहीं है (जब तक आप कवरिंग ) - {beginRange} . पर बस एक साधारण अनुक्रमणिका अच्छा प्रदर्शन सुनिश्चित करना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. साप्ताहिक रैंकिंग दिखाने के लिए ओरेकल एसक्यूएल बनाने की प्रक्रिया

  2. आप Oracle एपेक्स में एक रिपोर्ट में प्रत्येक पंक्ति में एक संपादन बटन कैसे जोड़ते हैं?

  3. सामान्य त्रुटि:1008 OCIStmtExecute:ORA-01008:सभी चर बाध्य नहीं हैं

  4. मैं एक बाधा के कॉलम नाम (नामों) को वापस करने के लिए फ़ंक्शन कैसे बना सकता हूं?

  5. एक varchar2 () में सभी मैच खोजें