2015-10-24 3 views
1

Две колонки в таблице cityWalkStartTime и cityWalkEndTime, с меткой времени.MYSQL avg time in where статья

Ищет запрос, который вернет идентификатор строки, для минимальной разницы во времени.

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

Любое исполнение enahncement для второго запроса, как TimeDiff вызывается дважды, один в запросе на выборку и другой в котором пункт – andyPaul

+0

Теоретически вы можете писать 'ВЫБРАТЬ RowId, td FROM (SELECT rowId, time_to_sec (и т.д.) AS td FROM walks) w WHERE w.td <10; '. Однако при внутренней оптимизации MySQL это может не повлиять (проверьте и посмотрите) –

+0

Подзапросы редко ускоряют работу. –

0

Это позволяет избежать вызова TimeDiff дважды. (Это, вероятно, не ускорить процесс достаточно, чтобы заметить.)

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