MySQL:行之间的时间

标签 mysql datetime select datediff

我是 MySQL 的新手,我正在尝试弄清楚如何计算日志表中各行之间传递的时间。

该表是一个基本表,包含 ID、Hostname、Info、Timestamp,数据如下:

+---+----------+-------------------+---------------------+
|ID | Hostname | Info              | Timestamp           |
+---+----------+-------------------+---------------------+
|445| switch1  | "port 1 inserted" | 2013-01-19 19:51:40 |
|446| switch1  | "port 2 inserted" | 2013-01-19 19:59:41 |
|447| Router2  | "alarm fan speed" | 2013-01-19 20:00:40 |
|448| switch1  | "alarm fan speed" | 2013-01-19 20:12:20 |
|449| Router2  | "alarm fan speed" | 2013-01-19 21:42:41 |
+---+----------+-------------------+---------------------+

所以基本上我想获得具有相同主机名的行之间的时间差,在这种情况下,第 445 行和第 446 行之间的时间差为 8 分 1 秒。在 446 和 448 之间,它会导致 12 分 39 秒。等等……

如有任何提示,我们将不胜感激。

最佳答案

这将为您提供行与行之间的时间差(以秒为单位):

SELECT c.info, 
       CASE 
         WHEN f.`timestamp` IS NOT NULL THEN 
         Timestampdiff(second, f.`timestamp`, 
         c.`timestamp`) 
         ELSE NULL 
       end AS time_diff 
FROM   (SELECT @rowa := @rowa + 1 AS id, 
               a.hostname, 
               a.info, 
               a.`timestamp` 
        FROM   sparkles a 
               JOIN (SELECT @rowa := 0) b 
        WHERE  a.hostname = 'switch1') c 
       LEFT JOIN (SELECT @rowb := @rowb + 1 AS id, 
                         d.hostname, 
                         d.info, 
                         d.`timestamp` 
                  FROM   sparkles d 
                         JOIN (SELECT @rowb := 0) e 
                  WHERE  d.hostname = 'switch1') f 
              ON f.id = c.id - 1 

结果(switch1 作为主机名)

|            INFO | TIME_DIFF |
-------------------------------
| port 1 inserted |    (null) |
| port 2 inserted |       481 |
| alarm fan speed |       759 |

See the demo

结果(Router2 作为主机名)

|            INFO | TIME_DIFF |
-------------------------------
| alarm fan speed |    (null) |
| alarm fan speed |      6121 |

See the demo

关于MySQL:行之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417729/

相关文章:

java - 将 Javascript new Date 转换为 Java joda DateTime 格式

java - dayOfMonth 的值 31 必须在 [1,30] 三月范围内

python - 使用 Python 编辑 Parquet 文件会导致日期时间格式错误

mysql - 将假行添加到 "in clause"中不存在行的查询结果中

mysql - 需要来自 promise in chain 的数据

mysql - 选择 MySQL 查询中不匹配的所有行

php - 优化MySQL近匹配查询

Sql:通过连接3张表获取属性

Mysql选择序号

MySQL,在除id之外的所有行中插入值