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 子句中两次来读取第 n-1 行的增量

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

因为我可以依靠订单。但是我不确定如何从这里开始。是否有可能以某种方式增加每一行的值?即使解决方案会通过从头开始计算每一行的总和来导致 O(N2) 运行时行为,这也是可以接受的。

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

我很想知道最好的解决方案有多简单或复杂......

万一它很重要,它是一个 MySQL 数据库。

4

1 回答 1

1

你可以用这样的自我加入来做到这一点:(徒手)

SELECT t1.id, SUM(t2.timestamp_delta) + 100
FROM badtable t1 JOIN badtable t2 ON t2.id <= t1.id 
GROUP BY t1.id
于 2013-06-21T19:34:11.417 回答