【问题标题】:Calculate the time difference between two timestamps in mysql计算mysql中两个时间戳的时间差
【发布时间】:2014-11-09 20:54:02
【问题描述】:

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

我希望我已经足够清楚地解释了自己。

【问题讨论】:

标签: mysql sql database time


【解决方案1】:

你可以使用原生的TIMESTAMPDIFF 函数:

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

如果您想找出给定主机 ID 的第一个时间戳和最后一个时间戳之间的差异,您可以在这里:

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

【讨论】:

  • 这是最好的答案
  • 爱德华你是对的,这就是我想要的 :) 谢谢@creaforge
【解决方案2】:

如果要在SQL语法中使用:

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

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

【讨论】:

    【解决方案3】:

    基本思想是为每个主机的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 谓词即可。

    【讨论】:

      【解决方案4】:

      您可以将其转换为 UNIX TIMESTAMP,然后像这样使用 php 的 date() 函数:

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

      这会让你与众不同。

      【讨论】:

        【解决方案5】:
        SELECT
        
            TIMESTAMPDIFF(MINUTE,MAX(pingtime), MIN(pingtime))
        
        FROM
            myTable
        
        WHERE WHERE host = 2;
        

        【讨论】:

          【解决方案6】:

          我正在使用 Azure SQL,对我来说,DATEDIFF 函数在使用 TIMESTAMPS 时工作正常,而不是 TIMESTAMPDIFF

          SELECT DATEDIFF(INTERVAL,timestampFrom,timestampTo)

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-13
            • 1970-01-01
            • 2016-12-17
            • 2014-05-04
            相关资源
            最近更新 更多