Как мне выбрать и обработать 2 записи, а затем пару? - PullRequest
1 голос
/ 05 июня 2019

Мне нужно обрабатывать записи одну за другой, сравнивая каждую с предыдущей, затем переходить к следующей и делать то же самое до последней записи.

Структура для обработки

id  dat        qty  dif
1   2019-05-01  2   NULL
2   2019-05-01  6   NULL
3   2019-05-01  3   NULL
1   2019-05-02  4   NULL
2   2019-05-02  7   NULL
3   2019-05-02  5   NULL

Ожидаемый результат

id  dat        qty  dif
1   2019-05-01  2   0
1   2019-05-02  4   2
2   2019-05-01  6   0
2   2019-05-02  7   1
3   2019-05-01  3   0
3   2019-05-02  5   2

Для id = 1 и dat = '2019-05-01' dif = (2 - 0), что является текущим кол-во минус предшествующее кол-во Для id = 1 и dat = '2019-05-02' dif = (4 - 2)

Нужен ли прокручиваемый курсор? Как получить это?

1 Ответ

1 голос
/ 05 июня 2019

Поскольку SQL Server 2008 не поддерживает LAG, мы можем попытаться смоделировать его, используя коррелированный подзапрос:

SELECT
    id,
    dat,
    qty,
    qty - COALESCE((SELECT TOP 1 t2.qty FROM yourTable t2
           WHERE t2.id = t1.id AND t2.dat < t1.dat
           ORDER BY t2.dat DESC), t1.qty) AS dif
FROM yourTable t1
ORDER BY
    id, dat;

enter image description here

Демо

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