我需要帮助来计算每行数据之间的差异。计数递增,每小时捕获一次数据。
+-------------------------+------------------+
| 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 |
+-------------------------+------------------+
使用lag()
:
select t.*,
(qty - lag(qty, 1, qty) over (order by t_stamp)) as diff
from t;
请注意,这使用lag()
的3参数形式将缺少的先前值(即第一个值)转换为指定值。