2012-09-14 45 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列表中,并将除零除误差作为发现零的信号将可能工作,但我不能真正推荐该方法...