0
我試圖找出數字範圍(SQL Server)中的差距。我的情況是低於...查找跨越多列的數字範圍的差距
ID Start End
1 1 4
2 1 6
3 2 4
4 8 10
5 13 14
Visual
-------------------------------
1-2-3-4
1-2-3-4-5-6
2-3-4
- -8-9-10
- - -13-14
這樣做的結果可能是沿着線的東西:
Table
-------------------------------
ID Start End Gap
4 8 10 -1
5 13 14 -2
最後,我想有間隙的範圍,但我應該能夠人物說出來上面......
Missing
7
11-12
我想出了是不是太緩慢或不佔範圍的重疊(例如ID 2)
解決方案CREATE TABLE #Docs (
[Rank] INT, --DENSE_RANK() OVER(ORDER BY BegProd)
ControlNumber BIGINT,
BegProd INT,
EndProd INT
)
SELECT
T1.ControlNumber,
T1.BegProd,
T1.EndProd,
MAX(T2.EndProd) AS [PreviousEndProd],
[Gap] = T1.BegProd - MAX(T2.EndProd) - 1
FROM #Docs T1
INNER JOIN #Docs T2
ON T1.[Rank] = T2.[Rank] + 1
AND T1.EndProd > T2.EndProd
GROUP BY T1.ControlNumber, T1.BegProd, T1.EndProd
HAVING T1.BegProd - MAX(T2.EndProd) > 1
有200多萬行此表和1比1十億
編輯 固定「失蹤」表的範圍跨度。 間隔列表示在起始數字之前有多少間隙。 (如缺少#7是1號)
我不明白正是你所期待的 - 我不能做的意義你的示例表輸出(在Gap列中值-1的意義是什麼?)也就是說,你可以使用一個Tally表。看看這篇關於計數表的文章:http://www.sqlservercentral.com/articles/T-SQL/62867/ – jlnorsworthy
你*失蹤*,例如9和11-12;你的意思是7而不是9? –
修正_Missing_表並澄清_Gap_列...查看Tally表。感謝你目前的幫助! – user1002479