我有一个数据表,每5分钟更新一次。
| TimeStamp | Data |
| 1 | 2 |
| 2 | 8 |
| 3 | 16 |
如何以不显示数据的方式选择此数据,而是选择上一个时间戳之间的差异,如下所示:
| TimeStamp | Data |
| 1 | 2 |
| 2 | 6 |
| 3 | 8 |
答案 0 :(得分:0)
如果您的时间戳没有间隙(如问题中的示例所示):
select t.timestampe,
t.data - coalesce(tprev.data, 0) as data
from table t left outer join
table tprev
on t.timestamp = tprev.timestemp + 1;
如果你有差距,这可能无法按照你想要的方式运作。
答案 1 :(得分:0)
如果Gordon设想的场景成为现实,那么你可以做这样的事情......
SELECT x.timestamp
, x.data-COALESCE(MAX(y.data),0) data
FROM my_table x
LEFT
JOIN my_table y
ON y.timestamp < x.timestamp
GROUP
BY x.timestamp;