Как получить предыдущее значение строки - PullRequest
5 голосов
/ 01 февраля 2011

Как получить значение из предыдущей строки результата оператора SELECT

Если у нас есть таблица с именем cardevent, в которой есть строки [ID (int), Value (Money)] и в ней есть несколько строк, например

ID --Value

1------70 
1------90
2------100
2------150
2------300 
3------150 
3------200 
3-----250 
3-----280

и так далее ...

Как создать один запрос, который получает каждый идентификатор строки, значение и предыдущее значение строки, в котором данные отображаются следующим образом

ID --- Value ---Prev_Value

1 ----- 70 ----------  0 
1 ----- 90 ---------- 70
2 ----- 100 --------  90 
2 ------150 -------- 100
2 ------300 -------- 150
3 ----- 150 -------- 300 
3 ----- 200 -------- 150 
3 ---- 250 -------- 200 
3 ---- 280 -------- 250

и т. Д.

Так может ли кто-нибудь помочь мне найти лучшее решение для такой проблемы?

Нужна помощь по запросу

Ответы [ 4 ]

5 голосов
/ 26 июля 2017

SELECT t.*, LAG(t.Value) OVER (ORDER BY t.ID) FROM table AS t

Это должно работать.Функция Lag возвращает предыдущее значение строки для определенного столбца.Я думаю, что это то, что вы хотите здесь.

5 голосов
/ 01 февраля 2011

Вы должны были бы присоединиться к таблице с самим собой, я не уверен, что это 100% законный SQL, но у меня нет SQL-сервера, чтобы попробовать это в данный момент, но попробуйте это:

select (ID, Value) from table as table1 join
inner join table as table2
on table1.ID = (table2.ID -1)
3 голосов
/ 25 апреля 2016

Вы можете использовать функции LAG () и LEAD () для получения предыдущих и следующих значений.

SELECT t.Value OVER (ORDER BY t.ID) PREVIOUS_VALUE,
t.value VALUE,
LEAD(t.value) OVER (ORDER BY t.ID) NEXT_VALUE
FROM TABLE T

GO
0 голосов
/ 06 апреля 2017
select t1.value - t2.value from table t1, table t2 
where t1.primaryKey = t2.primaryKey - 1

Попробуйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...