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)
REDIGERING:
Når man tænker over det, kan det være mere effektivt at bruge en underforespørgsel i select (ala Quassnois svar). Jeg ville prøve forskellige versioner og se på udførelsesplanerne for at se, hvilken der ville fungere bedst på størrelsen af det datasæt, du har...
EDIT2:
Jeg ser stadig, at dette får stemmer, selvom det er usandsynligt, at mange mennesker stadig bruger SQL Server 2005.
Hvis du har adgang til Windowed-funktioner såsom LEAD()
, så brug det i stedet...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable