2013-06-21 62 views
0

我有一個包含時間增量的字段的表。 行保證是按時間順序排列的,這意味着id爲1的行表示發生在第2行表示的行之前的事件。 現在我想要做一個查詢,它返回每個行的絕對時間戳。獲取每行的增量值總和

示例數據:

id timestamp_delta 
1 0 
2 22 
3 5 
4 10 

我知道的第一個條目的絕對時間。讓我們假設它是100 因此所得到的表我想用一個查詢來創建將是:

id timestamp_absolute 
1 100 
2 122 
3 127 
4 137 

看起來簡單,但是我很堅持這一任務。

什麼我能做的就是通過from子句中具有表兩次

select * 
from badtable t1, badtable t2 
where t2.id = t1.id-1 

,因爲我可以依靠的順序讀取行n-1的增量。但是我不確定如何從這裏出發。有沒有可能以某種方式增加每行的價值? 即使解決方案通過計算每行開頭的總和來產生O(N2)運行時行爲,也是可以接受的。

我想這不是我們應該存儲這些數據的方式。我們之所以選擇使用增量是爲了減少從移動應用程序傳輸的數據量(值得,即使僅節省幾個百分點),爲了方便起見,只需將它按原樣寫入服務器數據庫即可。

我很好奇,看看如何簡單或複雜,最好的解決辦法將是...

在如此重要的情況下,這是一個MySQL數據庫。

+0

您可以點擊這裏http://stackoverflow.com/questions/11664142/cumulative-total-in-ms-sql-服務器 –

+0

@OzanDeniz:這是專門針對SQLServer的 - 更好的MySQL問題將是http://stackoverflow.com/questions/664700和http://stackoverflow.com/questions/8359077。 –

+0

是的你對對不起,我看不到它 –

回答

1

你可以用自做加盟像這樣:(手繪)

SELECT t1.id, SUM(t2.timestamp_delta) + 100 
FROM badtable t1 JOIN badtable t2 ON t2.id <= t1.id 
GROUP BY t1.id 
+0

當然,那很簡單! 很明顯,我需要一些更多練習,使用group by子句,不知怎的,它對我來說並不那麼直觀。 謝謝! –

+0

@ didi_X8我的榮幸。如果您對答案感到滿意,請立即投票。 –

+0

@ didi_X8加入不等式不明顯 –