我是 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/