Разница SQL между строками
У меня есть таблица базы данных SQL 2008, подобная этой
name score
-----------------------
steve 207
steve 205
steve 200
steve 139
Я хочу получить разницу между строками. eqn = [строка - (строка + 1)]
поэтому я бы идеально хотел, чтобы это было,
steve 2 //207 - 205
steve 5 //205 - 200
steve 61 //200 - 139
steve 139 //139 - 0
Каков наилучший способ сделать это?
Спасибо!
Ответы
Ответ 1
Это один из способов сделать это
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
Ответ 2
Другой способ сделать это - использовать lag():
SELECT
name,
score - coalesce(lag(score) over (partition by name order by id), 0)
FROM table
ORDER BY name, id
Функция lag() не представляется доступной в TSQL, но это обходное решение предлагается в комментариях:
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