2013-10-11 32 views
3

我有一個有數字範圍列表的表。我需要知道,如果這些號碼的範圍重疊海誓山盟SQL-做任何數字範圍重疊

SQL Fiddle here

例如,最後兩行的小提琴重疊海誓山盟。我不確定你會如何在查詢結果中顯示。

任何幫助,將不勝感激。

編輯:如果不知道這會工作,但似乎是:

SELECT 
    * 
FROM 
(
    SELECT 
    FROM_NUM, 
    TO_NUM, 
    LEAD(FROM_NUM) OVER (ORDER BY FROM_NUM) A 
    FROM 
    RANGES 
) RANGES 
WHERE 
    A < TO_NUM 
+0

在技術上並不'INSERT INTO範圍內的值(2501,2501)'重疊呢? –

+0

他們與彼此重疊,但不是其他行,所以我不關心這些。 – Lock

回答

0
SELECT RANGES.FROM_NUM AS BASE_FROM_NUM, RANGES.TO_NUM AS BASE_TO_NUM, 
    OVERLAP.FROM_NUM AS OVERLAP_FROM_NUM, OVERLAP.TO_NUM AS OVERLAP_TO_NUM 
FROM RANGES 
INNER JOIN RANGES OVERLAP 
ON (((OVERLAP.FROM_NUM <= RANGES.FROM_NUM) AND (OVERLAP.TO_NUM >= RANGES.FROM_NUM)) 
OR ((OVERLAP.FROM_NUM <= RANGES.TO_NUM) AND (OVERLAP.TO_NUM >= RANGES.TO_NUM))) 
AND ((OVERLAP.FROM_NUM <> RANGES.FROM_NUM) AND (OVERLAP.TO_NUM <> RANGES.TO_NUM)) 

最後一行才停止行報告重疊自己。在實踐中,您將使用唯一的密鑰刪除它們(以防萬一你有相同的重複的行從/到數字):

AND (OVERLAP.ID <> RANGES.ID)