2013-06-21 58 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加入不等式不明显 –