Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个mysql表的一列中相邻行之间的时差_Mysql_Sql_Datetime_Subquery_Window Functions - Fatal编程技术网

一个mysql表的一列中相邻行之间的时差

一个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

我有一个大约有100000行的表,其结构如下:

+------+---------------------+-----------+
| 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中非常有效。稍后,我还将测试早期版本的解决方案。