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)
BEARBEITEN:
Wenn Sie darüber nachdenken, ist die Verwendung einer Unterabfrage in der Auswahl (ala Quassnois Antwort) möglicherweise effizienter. Ich würde verschiedene Versionen testen und mir die Ausführungspläne ansehen, um zu sehen, welche bei der Größe des Datensatzes, den Sie haben, am besten funktioniert ...
BEARBEITEN2:
Ich sehe immer noch, dass dies Stimmen sammelt, obwohl es unwahrscheinlich ist, dass viele Leute immer noch SQL Server 2005 verwenden.
Wenn Sie Zugriff auf Fensterfunktionen wie LEAD()
haben , dann benutze das stattdessen...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable