मुझे यकीन नहीं है कि आप यह करना चाहते हैं:
- जांचें कि क्या आप जिस पंक्ति को सम्मिलित करने जा रहे हैं, वह कुछ मौजूदा पंक्तियों के साथ ओवरलैप करती है, या
- सभी मौजूदा पंक्तियों में खोजें और ओवरलैप होने वाली पंक्तियों की पहचान करें?
यदि (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}
. पर बस एक साधारण अनुक्रमणिका अच्छा प्रदर्शन सुनिश्चित करना चाहिए।