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)
РЕДАКТИРАНЕ:
Като се замислим, използването на подзаявка в избрания (отговорът на ала Quassnoi) може да бъде по-ефективно. Бих пробвал различни версии и бих разгледал плановете за изпълнение, за да видя коя ще се представи най-добре при размера на набора от данни, който имате...
РЕДАКТИРАНЕ 2:
Все още виждам, че това събира гласове, макар че е малко вероятно много хора все още да използват SQL Server 2005.
Ако имате достъп до функции с прозорец, като LEAD()
, след това използвайте това вместо...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable