在mysql中计算两个时间戳之间的时间差

5

我正在处理一个MySQL数据库表格,其中包含一列时间戳(例如2014-09-16 09:08:05),用于记录我对不同主机进行ping的时间。我的问题是如何计算特定主机第一次ping和最后一次ping之间的时间差,以分钟为单位?另外,如何指定上述差异的开始和结束的不同时间戳(而不是第一次和最后一次ping)?以下是该表的示例:

|--|---------|-------------------|----|
|id|http_code|pingtime           |host|
|--|---------|-------------------|----|
|10|200      |2014-09-16 09:08:05|2   |
|--|---------|-------------------|----|
|11|200      |2014-09-16 10:07:05|1   |
|--|---------|-------------------|----|
|12|200      |2014-09-16 10:14:10|2   |
|--|---------|-------------------|----|

I hope that I've explain myself clear enough.


请查看此处:http://dev.mysql.com/doc/refman/5.6/en/date-calculations.html - Key_coder
6个回答

11
您可以使用本地的TIMESTAMPDIFF函数:
SELECT TIMESTAMPDIFF(<INTERVAL>,<timestampFrom>,<timestampTo>);

如果您想要找到给定主机ID的第一个和最后一个时间戳之间的差异,这里有一个方法:
SELECT TIMESTAMPDIFF(MINUTE,MIN(pingtime),MAX(pingtime))
FROM yourTable
WHERE host = 2;

这是最好的答案。 - Edward
Edward,你说得对,这就是我要找的 :) 谢谢@creaforge - MariusNV

2

如果您想在SQL语法中使用:

SELECT DATEDIFF(minute,'2008-11-30','2008-11-29') AS DiffDate

除了分钟,您也可以使用天。


0
基本思路是选择每个主机的ping时间的最大值和最小值,并连接两个子查询的结果。
我将时间差(SELECT TIMESTAMPDIFF(MINUTE, ..., ...)和其他细节留给您:
    SELECT FirstPing.host, FirstPing.first, LastPing.last
    FROM 
      (SELECT host, MAX(pingtime) AS last FROM Test GROUP BY host) AS LastPing
    INNER JOIN 
      (SELECT host, MIN(pingtime) AS first FROM Test GROUP BY host) AS FirstPing
    ON FirstPing.host = LastPing.host

关于考虑ping时间的第一次和最后一次,只需在每个子查询中添加一个where谓词即可表达。


0
SELECT

    TIMESTAMPDIFF(MINUTE,MAX(pingtime), MIN(pingtime))

FROM
    myTable

WHERE WHERE host = 2;

0
你可以将其转换为UNIX时间戳,然后使用PHP的date()函数,像这样:
$difference = date('Y-m-d H:i:s', strtotime($to) - strtotime($from));

这将给你差异。


0

我正在使用Azure SQL,对我来说,DATEDIFF函数在处理时间戳时运行良好,而不是TIMESTAMPDIFF

SELECT DATEDIFF(INTERVAL,timestampFrom,timestampTo)

您可以在INTERVAL中使用MINUTEDAY或您选择的间隔。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接