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;