给定一个具有单列的表,money
我如何计算该表中任意两个值之间的最小差异TSQL
?我正在寻找性能优化的解决方案,它可以处理数百万行。
问问题
730 次
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 回答