Gaps-and-Islands
在給定範圍內查找缺失的數字
嗨,我有一個表,其中包含具有值的開始列和結束列
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
對不起,如果這個答案令人費解。如果您給我列名等,我可以更具體。
編輯:我以為你的意思是一欄,而不是兩欄,我的錯。