【发布时间】:2021-08-28 18:34:16
【问题描述】:
类似问题
首先,我很确定必须在某个地方回答类似的问题,但我一直没能找到它。以下是一些我不想要的类似页面:
MySQL - UPDATE query based on SELECT Query 那是计算两行之间的时间差,两行的 ID 都已经知道,在我的情况下,我不知道前一行的 ID 是什么。另外,当我的表是一个简单的 Unix 时间戳时,使用 DATETIME。
Calculate the time difference between two timestamps in mysql 似乎依赖于与特定 TIMESTAMP 类型相关的函数。
Difference between current and previous timestamp 似乎在问正确的事情,但他的表没有实际的时间戳,我无法得到任何答案。
MySQL: how to get the difference between two timestamps in seconds 这个是无关的。我的时间已经在时间戳中,所以我可以减去。
Calculate delta(difference of current and previous row) mysql group by specific column 这个非常接近,但它是一个 SELECT 查询,我正在尝试更新表以在新列中包含此信息,以便我可以在后续查询中使用它。它使用的 DATEDIFF 可能很容易转换为简单的减法。我真的不想在几秒钟内设置一个包含所有可能差异值的新表。
我要做什么
在 Excel 中,我可以获取行,按“时间戳”列对它们进行排序,然后设置一个新列(称为“增量”),该列等于一个时间戳减去前一个时间戳。所以我会得到一个以秒为单位的值,它是一个时间戳和前一个时间戳之间经过的时间。例如,如果一行比前一行晚 1 秒,则该值将为“1”,或者如果晚一分钟,则该值为“60”。所有时间戳都是 Unix 时间戳,因此距离 1970 年 1 月 1 日只有几秒钟。
在 MySQL 中添加新列很容易,但我似乎找不到合适的查询来填充它。
这是一个填充了 delta 列的示例表:
| id | timestamp | delta |
|---|---|---|
| 3 | 1623400800 | NULL |
| 2 | 1623444000 | 43200 |
| 56 | 1623444060 | 60 |
解决方案约束
理想情况下,由于有很多行,为了提高效率,我想要一些功能类似于我在 Excel 中所做的事情。即对表进行排序,并根据排序后的表的数据填充delta。
当然,如果这不可能,那么必须进行单独搜索以填充每一行的“增量”的查询暂时可能是可以接受的。我只需要在部分数据上运行它很多次。
【问题讨论】:
标签: mysql sql sorting select sql-update