2

给定一个具有单列的表,money我如何计算该表中任意两个值之间的最小差异TSQL?我正在寻找性能优化的解决方案,它可以处理数百万行。

4

1 回答 1

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列表中并捕获除以零错误作为找到零的信号可能会起作用,但我真的不能推荐这种方法......

于 2012-09-14T20:13:52.813 回答