Diferencia SQL entre filas

Tengo una tabla de database de SQL 2008 como esta

name score ----------------------- steve 207 steve 205 steve 200 steve 139 

Quiero get la diferencia entre las filas. eqn = [row – (row + 1)] así que idealmente quiero que sea,

 steve 2 //207 - 205 steve 5 //205 - 200 steve 61 //200 - 139 steve 139 //139 - 0 

¿Cuál es la mejor manera de hacer esto? ¡Gracias!

Esta es un forma de hacerlo

 with cte as (SELECT ROW_NUMBER() OVER (PARTITION BY table.name ORDER BY id) row, name, score FROM table) SELECT a.name , a.score - ISNULL(b.score,0) FROM cte a LEFT JOIN cte b on a.name = b.name and a.row = b.row+1 

Otra forma de hacerlo es usar lag ():

 SELECT name, score - coalesce(lag(score) over (partition by name order by id), 0) FROM table ORDER BY name, id 

La function lag () no parece estar disponible en TSQL pero esta solución alternativa se sugiere en los comentarios:

 select name, score - coalesce( MIN(score) OVER (PARTITION BY name ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) , 0) as diff from table order by name, id