2015-10-24 71 views
1

表中的两列cityWalkStartTimecityWalkEndTime,带时间戳。MYSQL平均时间在哪里条款

寻找将返回行ID的查询,获取最小时间差。

Select rowId,TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime)) from walks where <time diffence is minimum in the entire database> 

另外,如果我想要时间差小于10秒的行。

Select rowId,TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime)) from walks where <time diffence is < 10 seconds> 

回答

0

非常简单:在与相应的ROWID数据库 最小值:

Select rowId,MIN(TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime))) 
from walks 
GROUP BY rowId 
ORDER BY MIN(TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime))) ASC 
LIMIT 1; 

就值< 10S

Select rowId,TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime)) 
from walks 
where TIME_TO_SEC(TIMEDIFF(cityWalkEndTime,cityWalkStartTime))<10; 
+0

第二查询作为TIMEDIFF任何性能enahncement被调用了两次,一个在where子句 – andyPaul

+0

理论上你可以写'选择ROWID选择查询等, td FROM(SELECT rowId,time_to_sec(etc)AS td FROM walking)w WHERE w.td <10;'。然而,通过MySQL的内部优化,它可能没有什么区别(测试并看到) –

+0

子查询很少加快速度。 –

0

这避免调用TIMEDIFF两次。 (这可能不加快速度足够注意。)

Select rowId, 
     TIME_TO_SEC(TIMEDIFF(cityWalkEndTime, cityWalkStartTime)) AS diff 
    from walks 
    HAVING diff < 10