一个mysql表的一列中相邻行之间的时差
我有一个大约有100000行的表,其结构如下:一个mysql表的一列中相邻行之间的时差,mysql,sql,datetime,subquery,window-functions,Mysql,Sql,Datetime,Subquery,Window Functions,我有一个大约有100000行的表,其结构如下: +------+---------------------+-----------+ | id | timestamp | eventType | +------+---------------------+-----------+ | 12 | 2015-07-01 16:45:47 | 3001 | | 103 | 2015-07-10 19:30:14 | 3001 | | 1174 | 20
+------+---------------------+-----------+
| id | timestamp | eventType |
+------+---------------------+-----------+
| 12 | 2015-07-01 16:45:47 | 3001 |
| 103 | 2015-07-10 19:30:14 | 3001 |
| 1174 | 2015-09-03 12:57:08 | 3001 |
+------+---------------------+-----------+
对于每一行,我想计算这一行和前一行的时间戳之间的天数。
如您所见,id不是连续的,该表包含不同的事件,我只想比较一个特定事件随时间的时间戳
我知道,对于两个数据的比较,可以使用DATEDIFF,我将使用一个查询定义这两行,该查询通过特定id选择行。
但由于我有1000多行,我正在寻找一种方法,以某种方式在整个表中循环
不幸的是,我的sql知识有限,搜索并没有显示一个足够接近我的问题的示例,我将继续从那里开始。
如果您有任何提示,我将非常感谢。如果您正在运行MySQL 8.0,您可以使用lag。假设您希望以秒为单位计算差异:
select t.*,
timestampdiff(
second,
lag(timestamp) over(partition by eventtype order by id),
timestamp
) diff
from mytable t
在早期版本中,一种替代方法是关联子查询:
select t.*,
timestampdiff(
second,
(select timestamp from mytable t1 where t1.eventtype = t.eventtype and t1.id < t.id order by t1.id desc limit 1),
timestamp
) diff
from mytable t
哪个版本的MySQL。在服务器上,我有一个mysql 5.7.31,但我可以将表转储到我的计算机上,以便在我有mysql 8.0.13的地方进行分析。所以这两种解决方案对我都有意义。亲爱的GMB,非常感谢。今天我将尝试一下。谢谢你,你的建议在mysql 8.0.13中非常有效。稍后,我还将测试早期版本的解决方案。