Разница между последовательными строками в таблице - PullRequest
0 голосов
/ 10 января 2020

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

+-------------------------+------------------+
|         t_stamp         |  qty             |
+-------------------------+------------------+
| 2020-01-08 19:00:00.007 |           514096 |
| 2020-01-08 20:00:00.007 |           514096 |
| 2020-01-08 21:00:00.003 |           514096 |
| 2020-01-08 22:00:00.003 |           514096 |
| 2020-01-08 23:00:00.013 |           514096 |
| 2020-01-09 01:00:00.003 |           531181 |
| 2020-01-09 02:00:00.003 |           531181 |
| 2020-01-09 03:00:00.000 |           531181 |
+-------------------------+------------------+

Что я хотел бы вернуть:


+-------------------------+------------------+
|         t_stamp         | count_per_hr     |
+-------------------------+------------------+
| 2020-01-08 19:00:00.007 |                0 |
| 2020-01-08 20:00:00.007 |                0 |
| 2020-01-08 21:00:00.003 |                0 |
| 2020-01-08 22:00:00.003 |                0 |
| 2020-01-08 23:00:00.013 |                0 |
| 2020-01-09 01:00:00.003 |            17085 |
| 2020-01-09 02:00:00.003 |                0 |
| 2020-01-09 03:00:00.000 |                0 |
+-------------------------+------------------+

1 Ответ

1 голос
/ 10 января 2020

Используйте lag():

select t.*,
       (qty - lag(qty, 1, qty) over (order by t_stamp)) as diff
from t;

Обратите внимание, что для преобразования отсутствующих предыдущих значений (т. Е. Первого значения) в указанное значение используется форма с тремя аргументами lag().

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