単一のmoney
列を持つテーブルがある場合、?を使用してそのテーブル内の任意の2つの値の最小の差を計算するにはどうすればよい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
これは、テーブルの1回のスキャンで実行されます(理想的にはYourColumn
、並べ替えを回避するためにインデックスをオンにし、その単一の列のインデックスを狭くするとIOが減少します)。
私はそれを短絡させる良い方法を考えることができないので、それがゼロの可能な最小の差を見つけた場合、テーブルのスキャンを1回未満行います。リストに追加MIN(CASE WHEN Diff = 0 THEN 1/0 END)
し、SELECT
ゼロが見つかったというシグナルとしてゼロ除算エラーをトラップすることはおそらく機能しますが、そのアプローチを実際に推奨することはできません...
于 2012-09-14T20:13:52.813 に答える