获取每行增量值的总和[重复]

Posted

技术标签:

【中文标题】获取每行增量值的总和[重复]【英文标题】:Get sum of delta values per row [duplicate] 【发布时间】:2013-06-21 19:28:24 【问题描述】:

我有一个包含时间增量字段的表。 这些行保证按时间顺序排列,这意味着 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 数据库。

【问题讨论】:

你可以在这里查看***.com/questions/11664142/… @OzanDeniz:这是专门针对 SQLServer 的 - 对于 MySQL,更好的问题是 ***.com/questions/664700 和 ***.com/questions/8359077。 是的,你是对的,抱歉我没看到 【参考方案1】:

您可以像这样使用自联接来做到这一点:(徒手)

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

【讨论】:

当然,就这么简单!显然我需要更多练习使用 group by 子句,不知何故它对我来说不是那么直观。谢谢! @didi_X8 很高兴。如果您对答案感到满意,请点赞。 @didi_X8 加入不等式并不明显 @flem 你可能需要一个 + 100 sqlfiddle

以上是关于获取每行增量值的总和[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mysql - 防止重复输入字段中的增量值

关于清除 Sql 表变量的自动增量值 [重复]

增量值有效,但不适用于附加的 HTML [重复]

如何将自动增量值设置为我喜欢的默认值 [重复]

如何在飞镖列表中获取重复值的总和?

总和问题 - 不给出单独的行总和,显示每行的总和