SQL Server:表中连续行之间的差

问题描述 投票:0回答:1

我需要帮助来计算每行数据之间的差异。计数递增,每小时捕获一次数据。

+-------------------------+------------------+
|         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 |
+-------------------------+------------------+
sql-server tsql
1个回答
0
投票

使用lag()

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

请注意,这使用lag()的3参数形式将缺少的先前值(即第一个值)转换为指定值。

© www.soinside.com 2019 - 2024. All rights reserved.