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)
UPRAVIT:
Když se nad tím zamyslíte, použití poddotazu ve výběru (ala Quassnoiova odpověď) může být efektivnější. Zkusil bych různé verze a podíval se na prováděcí plány, abych zjistil, která by fungovala nejlépe s ohledem na velikost souboru dat, který máte...
EDITACE 2:
Stále vidím, že to sbírá hlasy, i když je nepravděpodobné, že mnoho lidí stále používá SQL Server 2005.
Pokud máte přístup k funkcím v okně, jako je LEAD()
, pak místo toho použijte...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable