给定一个包含单个money
列的表,如何使用TSQL
计算该表中任意两个值之间的最小差异?我正在寻找性能优化的解决方案,它可以处理数百万行。
答案 0 :(得分: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
列表并将除以零误差作为发现零的信号可能会有效但我不能真正推荐这种方法......