获取每行的delta值之和

时间:2013-06-21 19:28:24

标签: mysql sql

我有一个包含时间增量的字段的表。 保证行按时间顺序排列,这意味着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子句中的表格两次

来读取行n-1的增量
select *
from badtable t1, badtable t2
where t2.id = t1.id-1

因为我可以依赖订单。但是我不确定怎么离开这里。有可能以某种方式只增加每行的值吗? 即使解决方案通过计算每行开头的总和也会导致O(N2)运行时行为,这是可以接受的。

我想这不是我们存储这些数据的方式。我们选择使用delta的原因是为了减少从移动应用程序传输的数据量(值得,即使只节省了几个百分点),为了方便起见,只需按原样将其写入服务器数据库。

我很想知道最佳解决方案将会变得多么简单或复杂......

如果重要,那就是MySQL数据库。

1 个答案:

答案 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