5

I work on a MySQL database table that has a column containing timestamps (Ex. 2014-09-16 09:08:05) of the time I ping different hosts. My question is how could I calculate in minutes the difference between the first ping and the last one for specific hosts? Also how could I specify different timestamps for the start and the end of the difference mentioned above (instead of the first and last ping). Here is an example of the table:

|--|---------|-------------------|----|
|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.

CodeNewbie
  • 2,003
  • 16
  • 29
MariusNV
  • 310
  • 3
  • 6
  • 17

6 Answers6

11

You could use the native TIMESTAMPDIFF function :

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

If you want to find the difference between the first and the last timestamp of a given host ID, here you are:

SELECT TIMESTAMPDIFF(MINUTE,MIN(pingtime),MAX(pingtime))
FROM yourTable
WHERE host = 2;
GuCier
  • 6,919
  • 1
  • 29
  • 36
2

If you want to use in SQL syntax:

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

In addition to minute, you can use day as well.

j413254
  • 173
  • 1
  • 10
0

The basic idea is to select the max and the min value for the pingtime of each host, and join the results of both subqueries.

I leave the time difference (SELECT TIMESTAMPDIFF(MINUTE, ..., ...)) and other details for you:

    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

As to expressing the first and the last times to consider for the ping times, simply add a where predicate in each subquery.

Community
  • 1
  • 1
JotaBe
  • 38,030
  • 8
  • 98
  • 117
0

You could convert it to UNIX TIMESTAMP and then use php's date() function like so:

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

This would give you the difference.

Edward
  • 1,806
  • 5
  • 26
  • 36
0
SELECT

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

FROM
    myTable

WHERE WHERE host = 2;
Ankur Singhal
  • 26,012
  • 16
  • 82
  • 116
0

I am using Azure SQL and for me the DATEDIFF function works fine when working with TIMESTAMPS, instead of TIMESTAMPDIFF

SELECT DATEDIFF(INTERVAL,timestampFrom,timestampTo)

You can use MINUTE, DAY or your choice of interval in INTERVAL

tyler
  • 91
  • 8