mysql - 获取每行增量值的总和

标签 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 数据库。

最佳答案

您可以通过像这样的自连接来做到这一点:(徒手)

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

关于mysql - 获取每行增量值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242905/

相关文章:

mysql - 选择分组依据并对具有相同金额的列求和

php - MySQL 和 MS SQL 查询执行不同

sql - 我应该使用什么数据类型来存储货币值?

mysql - 自连接表以获取 2 列的所有组合的值

php - php 查询错误

java - 如何在 Eclipse 项目中包含 mysql 数据库

sql - SQL 中处理 INT 数据类型字段中无值和零值之间差异的正确方法

mysql - 我的 Sql 数据输出将行转换为列,如数据透视表

php - order 和 order_lines 表 - 重复数据或使用版本控制?

使用外键创建表时 MySQL 错误号 150