Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查找表中行的最小和最大时差_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何查找表中行的最小和最大时差

Mysql 如何查找表中行的最小和最大时差,mysql,sql,database,Mysql,Sql,Database,我有下表的结构和数据 DriverName CarType StartTime EndTime ---------- ------- --------- -------- DriverA Honda 2014-09-29 14:32:03 2014-09-29 14:48:09 DriverA Honda 2014-09-29 12:32:03

我有下表的结构和数据

DriverName CarType      StartTime                  EndTime
---------- -------      ---------                  --------
DriverA    Honda        2014-09-29 14:32:03        2014-09-29 14:48:09
DriverA    Honda        2014-09-29 12:32:03        2014-09-29 14:32:09
DriverA    Honda        2014-09-29 10:32:03        2014-09-29 14:32:09

DriverA    Toyota        2014-09-29 10:32:03       2014-09-29 10:34:09
DriverA    Toyota        2014-09-29 9:32:03        2014-09-29 9:39:09
DriverA    Toyota        2014-09-29 8:32:03        2014-09-29 8:52:09
如何在秒/分钟/小时内获得最差、最好和平均的时间

DriverName  CarType     Worst                        Best      
---------- --------     ------                       -----     
DriverA     Honda       04:00:06 (4 hrs 6 seconds)    00:04:06 (4 minutes 3 seconds)
DriverA     Toyota      00:20:06 (4 hrs 6 seconds)    00:2:06 (20 minutes 3 seconds)

为了得到最佳和最差的结果,您需要得到开始时间和结束时间之间的日期差,然后分别得到最小值或最大值,然后对于平均值,您基本上可以使用平均值函数进行相同的操作。最后,您需要对CarType和(我认为)驱动程序进行分组,这里是一个示例:

编辑:

有人指出,
DATEDIFF
的运行方式与我预期的不同,它将在几天内显式返回diff,我更新了查询以使用
TIMEDIFF
,并且我还添加了
TIME\u to_SEC()
函数以秒为单位直接提供输出

SELECT DriverName, 
       CarType, 
       MAX(TIME_TO_SEC(TIMEDIFF(EndTime,StartTime))) AS 'Worst', 
       MIN(TIME_TO_SEC(TIMEDIFF(EndTime,StartTime))) AS 'Best', 
       AVG(TIME_TO_SEC(TIMEDIFF(EndTime,StartTime))) AS 'Average'
GROUP BY DriverName, CarType

您可能想使用
timestampdiff()

如果要将值显示为时间格式:

select DriverName, CarType,
       date_format(cast(0 as datetime) + interval min(timestampdiff(second, StartTime, EndTime,)) second,
                   '%H:%m:%d) as Best,
       date_format(cast(0 as datetime) + interval max(timestampdiff(second, StartTime, EndTime)) second,
                   '%H:%m:%d') as Worst
from followingtable ft
group by DriverName, CarType;

最大时差是最差的,对吗?我想你把它翻了。@Anthony你试过这个问题了吗?由于DATEDIFF以天为单位计算差异,因此到处都会得到0。所以我不明白你为什么把这个答案标记为正确的。@Gervs,谢谢你指出这一点,我已经习惯了MSSQL语法,我还没有想到这一点。
select DriverName, CarType,
       date_format(cast(0 as datetime) + interval min(timestampdiff(second, StartTime, EndTime,)) second,
                   '%H:%m:%d) as Best,
       date_format(cast(0 as datetime) + interval max(timestampdiff(second, StartTime, EndTime)) second,
                   '%H:%m:%d') as Worst
from followingtable ft
group by DriverName, CarType;