SELECT
[current].rowInt,
[current].Value,
ISNULL([next].Value, 0) - [current].Value
FROM
sourceTable AS [current]
LEFT JOIN
sourceTable AS [next]
ON [next].rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > [current].rowInt)
編集:
それについて考えると、select(ala Quassnoiの答え)でサブクエリを使用する方が効率的かもしれません。さまざまなバージョンを試し、実行計画を調べて、使用しているデータセットのサイズでどれが最適に機能するかを確認します...
編集2:
多くの人がまだSQLServer2005を使用している可能性は低いですが、私はまだこの票を集めています。
LEAD()
などのウィンドウ関数にアクセスできる場合 、代わりにそれを使用してください...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable