【发布时间】:2018-10-14 04:12:53
【问题描述】:
SQL 服务器 2012
原始数据
ID VAL Time
+---+----+---------------------+
| 2 | 1 | 2015-05-09 12:54:39 |
| 3 | 10 | 2015-05-09 12:54:39 |
| 2 | 1 | 2015-05-09 12:56:39 |
| 3 | 10 | 2015-05-09 12:56:39 |
| 2 | 5 | 2015-05-09 13:48:30 |
| 3 | 16 | 2015-05-09 13:48:30 |
| 2 | 7 | 2015-05-09 15:01:09 |
| 3 | 20 | 2015-05-09 15:01:09 |
+---+----+---------------------+
我有一张表,其中 VAL 会随着时间的推移而永远增加。我想操纵数据以显示随着时间的推移每个 ID 的 VAL 增加了多少。所以时间 2 的值 - 时间 1 的值
理想结果:
ID VALI Time
+---+----+---------------------+
| 2 | 0 | 2015-05-09 12:56:39 |
| 3 | 0 | 2015-05-09 12:56:39 |
| 2 | 4 | 2015-05-09 13:48:30 |
| 3 | 6 | 2015-05-09 13:48:30 |
| 2 | 2 | 2015-05-09 15:01:09 |
| 3 | 4 | 2015-05-09 15:01:09 |
+---+----+---------------------+
到目前为止的代码:
select
t1.Time,t1.[ID],t2.[VAL]-t1.[VAL] AS [ValI]
from #tempTable t1
inner join #tempTable t2 ON t1.[ID]=t2.[ID]
AND t1.[Time]<t2.[Time]
我需要计算当前时间戳与仅当前时间戳之前的时间之间的差异,而不是当前时间戳之前的所有时间戳。到目前为止,当 VAL 没有改变时,我得到了很多重复值。
【问题讨论】:
-
查看 Sql Server 的 LAG() 函数。
-
什么版本的 SQL Server?
标签: sql sql-server sql-server-2012 inner-join aggregate-functions