The return you are getting is correct for the format you are using. A 90 second difference is in fact 1 minute, 30 seconds(130). To get the time difference in seconds convert the datetime or timestamp to a julian date or unixtime and then process.
SELECT start_time, end_time, UNIX_TIMESTAMP(end_time) - UNIX_TIMESTAMP(start_time) FROM mailings_sendstats order by start_time desc; I hope this helps... Pat... CocoNet Corporation SW Florida's 1st ISP ----- Original Message ----- From: "Brian Erickson" <[EMAIL PROTECTED]> To: <mysql@lists.mysql.com> Sent: Thursday, March 03, 2005 7:23 PM Subject: # Seconds between two datetime fields > We have a table that has two datetime fields (start_time and > end_time). We'd like to be able to calculate the number of seconds > between these two fields in a query. However, a simple "end_time - > start_time" does not yield a correct result. > > SELECT start_time, end_time, end_time - start_time FROM > mailings_sendstats order by start_time desc; > +---------------------+---------------------+-----------------------+ > | start_time | end_time | end_time - start_time | > +---------------------+---------------------+-----------------------+ > | 2005-03-02 19:08:00 | 2005-03-02 19:08:53 | 53 | > | 2005-03-02 19:06:00 | 2005-03-02 19:07:31 | 131 | > | 2005-03-02 19:04:00 | 2005-03-02 19:04:55 | 55 | > | 2005-03-02 19:02:00 | 2005-03-02 19:02:53 | 53 | > | 2005-03-02 19:00:00 | 2005-03-02 19:01:10 | 110 | > | 2005-03-02 18:57:59 | 2005-03-02 18:59:39 | 180 | > | 2005-03-02 18:56:00 | 2005-03-02 18:57:10 | 110 | > | 2005-03-02 18:54:00 | 2005-03-02 18:55:20 | 120 | > | 2005-03-02 18:52:00 | 2005-03-02 18:53:22 | 122 | > | 2005-03-02 18:50:00 | 2005-03-02 18:51:26 | 126 | > | 2005-03-02 18:48:00 | 2005-03-02 18:48:58 | 58 | > | 2005-03-02 18:46:00 | 2005-03-02 18:47:28 | 128 | > etc > > As you can see, if the time difference is less than 1 minute, a > correct result is returned. If the difference is 1 minute and 30 > seconds, '130' is returned instead of 90. > > I tried playing with the end_time - start_time conversion using > different calculations. What I came up with is below. > > mysql> SELECT start_time, end_time, > -> end_time - start_time as cur, > -> FLOOR((end_time - start_time) / 100) as num, > -> (end_time - start_time) % 100 as mod, > -> (FLOOR((end_time - start_time) / 100) * 60) + (end_time - > start_time) % 100 AS seconds > -> FROM mailings_sendstats > -> ORDER BY id desc; > +---------------------+---------------------+-----+------+------+---------+ > | start_time | end_time | cur | num | mod | seconds | > +---------------------+---------------------+-----+------+------+---------+ > | 2005-03-02 19:10:00 | 2005-03-02 19:11:07 | 107 | 1 | 7 | 67 | > | 2005-03-02 19:08:00 | 2005-03-02 19:08:53 | 53 | 0 | 53 | 53 | > | 2005-03-02 19:06:00 | 2005-03-02 19:07:31 | 131 | 1 | 31 | 91 | > | 2005-03-02 19:04:00 | 2005-03-02 19:04:55 | 55 | 0 | 55 | 55 | > | 2005-03-02 19:02:00 | 2005-03-02 19:02:53 | 53 | 0 | 53 | 53 | > | 2005-03-02 19:00:00 | 2005-03-02 19:01:10 | 110 | 1 | 10 | 70 | > | 2005-03-02 18:57:59 | 2005-03-02 18:59:39 | 180 | 1 | 80 | 140 | > | 2005-03-02 18:56:00 | 2005-03-02 18:57:10 | 110 | 1 | 10 | 70 | > | 2005-03-02 18:54:00 | 2005-03-02 18:55:20 | 120 | 1 | 20 | 80 | > | 2005-03-02 18:52:00 | 2005-03-02 18:53:22 | 122 | 1 | 22 | 82 | > | 2005-03-02 18:50:00 | 2005-03-02 18:51:26 | 126 | 1 | 26 | 86 | > | 2005-03-02 18:48:00 | 2005-03-02 18:48:58 | 58 | 0 | 58 | 58 | > | 2005-03-02 18:46:00 | 2005-03-02 18:47:28 | 128 | 1 | 28 | 88 | > etc > > First, I calculated the number of minutes (num), then seconds (mod), > then total seconds (seconds). If you scroll through the results, > you'll see most of them are accurate. However, when the beginning time > is just before a new minute, the entire calculation is thrown off. > Examples: > > | 2005-03-02 18:57:59 | 2005-03-02 18:59:39 | 180 | 1 | 80 | 140 | > | 2005-03-02 18:37:59 | 2005-03-02 18:38:53 | 94 | 0 | 94 | 94 | > > So my question is, how can I fix this? I know there are several > date/time functions that I could probably use, but they were not > introduced until version 4.1 and I am stuck with version 3.23. We also > modified the table to use timestamp(14) fields instead of datetime > fields, but the same result occurs. > > Ultimately: > > a) Can someone think of a way to modify the query above so that it produces > *correct* results every time (maybe I'm missing something simple after > working on this for so long) > > b) We're using this table to track execution time of PHP Cron scripts. > We may be approaching this entirely the wrong way. If someone has > other ideas, please let me know. > > Thank you very much! > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]