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

时间:2014-09-16 07:38:51

标签: mysql sql database time

我在一个MySQL数据库表上工作,该表包含一个包含时间戳的列(Ex.2014-09-16 09:08:05)。我的问题是如何在几分钟内计算出第一个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   |
|--|---------|-------------------|----|

我希望我能够清楚地解释自己。

5 个答案:

答案 0 :(得分:5)

您可以使用原生TIMESTAMPDIFF功能:

SELECT TIMESTAMPDIFF(<INTERVAL>,<timestampFrom>,<timestampTo>);

如果要查找给定主机ID的第一个和最后一个时间戳之间的差异,请执行以下操作:

SELECT TIMESTAMPDIFF(MINUTE,MIN(pingtime),MAX(pingtime))
FROM yourTable
WHERE host = 2;

答案 1 :(得分:1)

如果要在SQL语法中使用:

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

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

答案 2 :(得分:0)

基本思想是为每个主机的pingtime选择最大值和最小值,并加入两个子查询的结果。

我为您留下time difference (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谓词。

答案 3 :(得分:0)

您可以将其转换为UNIX TIMESTAMP,然后使用php的date()函数,如下所示:

$difference = date('Y-m-d H:i:s', strtotime($to) - strtotime($from));

这会给你带来不同。

答案 4 :(得分:0)

SELECT

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

FROM
    myTable

WHERE WHERE host = 2;