Gaps-and-Islands

在給定範圍內查找缺失的數字

  • October 30, 2018

嗨,我有一個表,其中包含具有值的開始列和結束列

Start   End
9       10
11      19
29      44
45      51
56      60

現在,如果我給出範圍,15 to 60我需要返回未包含在上述範圍內的值。

我期待的輸出是 -20,21,22,23,24,25,26,27,28,52,53,54,55

我怎樣才能找回這個?

在 postgresql 中:

CREATE TABLE ranges
(n1 int,
n2 int);

INSERT INTO ranges
VALUES (9,10),(11,19),(29,44),(45,51),(56,60);

SELECT n FROM ranges
RIGHT JOIN generate_series(15,60) n
ON (n1 <= n AND n <= n2) WHERE n1 IS NULL;

我使用具有 dimdate 或 count 數據的表來執行此類計算,但您也可以使用具有至少 60 個順序標識的表的標識列來執行此操作。

您的另一個選擇是從另一個表中選擇 60 行左右,並使用 RowNumber() 函式。然後,您將右連接到該選擇,並在原始列表中找到空值。

SELECT * 
FROM StartEnd (Your original table)
RIGHT JOIN (SELECT ROWNUMBER() as num 
           FROM SomeTable (any table with 60 rows) 
           WHERE SomeTable.column1 <= 60) 
   as SomeTableSubQuery on SomeTableSubQuery.num = StartEnd.numbers
WHERE StartEnd.numbers IS NULL

對不起,如果這個答案令人費解。如果您給我列名等,我可以更具體。

編輯:我以為你的意思是一欄,而不是兩欄,我的錯。

引用自:https://dba.stackexchange.com/questions/131751