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)
EDYTUJ:
Myśląc o tym, użycie podzapytania w select (odpowiedź ala Quassnoi) może być bardziej wydajne. Wypróbowałbym różne wersje i przyjrzałbym się planom wykonania, aby zobaczyć, które będą działać najlepiej w przypadku rozmiaru zestawu danych, który posiadasz...
EDIT2:
Nadal widzę, że to zbiera głosy, chociaż jest mało prawdopodobne, że wiele osób nadal używa SQL Server 2005.
Jeśli masz dostęp do funkcji okienkowych, takich jak LEAD()
, a następnie użyj tego zamiast...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable