Оператор выбора SQL Где время *: 00 - PullRequest
0 голосов
/ 22 сентября 2011

Я пытаюсь создать отфильтрованную таблицу на основе существующей таблицы.В текущей таблице есть строки для каждой минуты каждого часа в течение 24 дней в зависимости от местоположения (tmcs).

Я хочу отфильтровать эту таблицу в другую таблицу, в которой есть строки всего по 1 часу для каждого из 24дни в зависимости от местоположения (tmcs)

Вот SQL-оператор, который, как я думал, сделал бы это ...

 SELECT  
 Time_Format(t.time, '%H:00') as time, ROUND(AVG(t.avg), 0) as avg, 
 tmc, Date, Date_Time FROM traffic t 
 GROUP BY time, tmc, Date

Проблема в том, что я все еще получаю 247 000 строк ...и в соответствии с простой математикой у меня должно быть только:

Местоположения (TMCS): 14 часов в день: 24 отслеживаемых дня: всего 24 = 14 * 24 * 24 = 12 096

Моя исходная таблицаимеет 477 277 строк. Когда я создаю новую таблицу из этого запроса, я получаю около 247 000, что не имеет смысла, поэтому мой запрос должен быть неправильным.

Причина, по которой я использовал этот метод вместо предложения where, заключается в том, что я хотелнайти среднюю скорость (в среднем) в час.Это не является обязательным, поэтому я бы хорошо использовал предложение Where для времени, но я просто не знаю, как это сделать, исходя из *: 00. Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 22 сентября 2011

Исправьте GROUP BY так, чтобы оно было стандартным, а не случайным расширением MySQL

SELECT  
 Time_Format(t.time, '%H:00') as time,
 ROUND(AVG(t.avg), 0) as avg, 
 tmc, Date, Date_Time
FROM traffic t 
GROUP BY
 Time_Format(t.time, '%H:00'), tmc, Date, Date_Time

Запустите это с SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';, чтобы увидеть ошибки, которые выдает другая СУБД, и заставить MySQL работать правильно

...