2012-09-14 63 views
2

給定一個包含單個money列的表格如何使用TSQL來計算該表格中任意兩個值之間的最小差異?我正在尋找性能優化的解決方案,這將與數百萬行工作。MS SQL Server 2008/2012獲取任意兩個值之間的最小差異

+1

是的我刪除了我的評論,因爲我沒有發現。將爲後代再次發佈!在列上有一個索引的'SELECT MAX(col) - MIN(col)'將用於最大的部分。 –

+0

它肯定會的,在它的相當快,面臨的挑戰是最小的一個:( – user1514042

+0

我會重新短語的問題,以避免混淆,將我? – user1514042

回答

2

對於SQL Server 2012,你可以使用

;WITH CTE 
    AS (SELECT YourColumn - Lag(YourColumn) OVER (ORDER BY YourColumn) AS Diff 
     FROM YourTable) 
SELECT 
     Min(Diff) AS MinDiff 
FROM CTE 

這做它用表的一次掃描(理想情況下,你會對YourColumn索引以避免排序和對單個列窄指數將降低IO)。

我不認爲它越來越短路的一個很好的方式等方面做了表的不到一次掃描,如果發現等於零的最小可能差。將MIN(CASE WHEN Diff = 0 THEN 1/0 END)添加到SELECT列表中,並將除零除誤差作爲發現零的信號將可能工作,但我不能真正推薦該方法...