SQL - Как сложить только одну строку выше - PullRequest
0 голосов
/ 04 июня 2019

У меня есть такой набор данных ниже:

the result column is the sum value of only one row above the current row

Столбец результата представляет собой сумму столбца значений этой строки и столбца значений на одну строку выше текущей строки.

Можно ли написать запрос для этого результата?

Ответы [ 3 ]

0 голосов
/ 04 июня 2019

Если ваша база данных не поддерживает LAG, то у нас есть несколько других вариантов.В MySQL мы можем попытаться использовать коррелированный подзапрос, чтобы найти значение задержки:

SELECT
    id,
    value,
    COALESCE((SELECT t2.value FROM yourTable t2
     WHERE t2.id < t1.id ORDER BY t2.id DESC LIMIT 1), 0) result
FROM yourTable t1;

Аналогичный запрос также будет работать на SQL Server, используя TOP 1 в подзапросе.

0 голосов
/ 04 июня 2019

Вы можете использовать lag(), как в:

select t.*, 
       (value + lag(value) over (order by id)) as result
from t;

Если вы хотели получить значение для первой строки, вы можете использовать sum() с предложением управления окнами:

select t.*,
       sum(t.value) over (order by t.id rows between 1 preceding and current row) as result
from t;

Это легко обобщает на несколько строк.

Или, если у id нет пропусков, вы можете использовать join:

select t.*, (t.value + tprev.value) as result
from t left join
     t tprev
     on tprev.id = t.id - 1;
0 голосов
/ 04 июня 2019

Вы не отметили свой вопрос определенными , но большинство современных РСУБД поддерживают оконную функцию lag:

SELECT value + COALESCE(LAG(value) OVER (ORDER BY id), 0) AS result
FROM   mytable
...