2
给定一个包含单个money
列的表格如何使用TSQL
来计算该表格中任意两个值之间的最小差异?我正在寻找性能优化的解决方案,这将与数百万行工作。MS SQL Server 2008/2012获取任意两个值之间的最小差异
给定一个包含单个money
列的表格如何使用TSQL
来计算该表格中任意两个值之间的最小差异?我正在寻找性能优化的解决方案,这将与数百万行工作。MS SQL Server 2008/2012获取任意两个值之间的最小差异
对于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
列表中,并将除零除误差作为发现零的信号将可能工作,但我不能真正推荐该方法...
是的我删除了我的评论,因为我没有发现。将为后代再次发布!在列上有一个索引的'SELECT MAX(col) - MIN(col)'将用于最大的部分。 –
它肯定会的,在它的相当快,面临的挑战是最小的一个:( – user1514042
我会重新短语的问题,以避免混淆,将我? – user1514042