नीचे दिए गए आरेख को देखें जो कुछ अतिव्यापी समय अवधियों को दर्शाता है
X----| |--------| |------X
|-------X X------------X
|----| X----|
X
. के साथ चिह्नित किसी भी सन्निहित समयावधि की शुरुआत या समाप्ति किसी अन्य समय अवधि के भीतर नहीं आता है। अगर हम इन समयों को पहचान लें तो हम कुछ प्रगति कर सकते हैं।
यह क्वेरी सीमाओं की पहचान करती है।
SELECT boundary FROM
(
-- find all the lower bounds
SELECT d1.StartDate AS boundary, 'lower' as type
FROM dates d1
LEFT JOIN dates d2 ON (
d1.StartDate > d2.StartDate
AND
d1.StartDate < d2.EndDate
)
WHERE d2.RowId IS NULL
GROUP BY d1.StartDate
UNION
-- find all the upper bounds
SELECT d1.EndDate AS boundary, 'upper' as type
FROM dates d1
LEFT JOIN dates d2 ON (
d1.EndDate > d2.StartDate
AND
d1.EndDate < d2.EndDate
)
WHERE d2.RowId IS NULL
GROUP BY d1.StartDate
) as boundaries
ORDER BY boundary ASC
आपके डेटा पर इस क्वेरी का परिणाम है
boundry | type
------------------
2011-01-01 | lower
2011-02-20 | upper
2011-03-01 | lower
2011-04-01 | upper
आप जिस दिनांक सीमा का अनुसरण कर रहे हैं वह ऊपर दर्शाई गई लगातार निचली और ऊपरी सीमाओं के बीच है। थोड़े से पोस्ट प्रोसेसिंग के साथ, इन्हें आसानी से पाया जा सकता है।