2014-02-07 257 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; 

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