2014-02-07 258 views
1

我有一张表格,每5分钟更新一次数据。当前时间戳与之前时间戳之间的差异

| TimeStamp | Data | 
| 1  | 2 | 
| 2  | 8 | 
| 3  | 16 | 

如何选择以这样一种方式,它并没有显示数据这一数据,但最后的时间戳之间的差别,就像这样:

| TimeStamp | Data | 
| 1  | 2 | 
| 2  | 6 | 
| 3  | 8 | 

回答

0

如果戈登设想的情景物化,那么你可以做这样的事情...

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; 
+0

有似乎是一个问题,当有差距。如果我在一段时间内收到0数据,最终会得到负数据和关闭数字。任何有关如何解决这个问题的建议? – zlack

+0

我建议你发布一个sqlfiddle来展示问题。 – Strawberry

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; 

如果您有空隙,这可能无法按照您的方式工作。