Как сгруппировать по минутам в пределах диапазона времени и отображать 0 значений в MySQL? - PullRequest
1 голос
/ 29 апреля 2011

Я хочу сгруппировать каждую минуту между датами 1 и 2 в следующем запросе. Также должны отображаться значения 0. Таким образом, каждая минута между датами должна отображаться. Проблема в том, что эти даты не существуют в таблице.

SELECT 
click.date as 'date',
COUNT(*)
FROM click 
INNER JOIN short_url surl ON click.short_url_id = surl.id
INNER JOIN article_surl ON article_surl.article_id = 3
WHERE click.date BETWEEN (?Date1:'2011-04-24 13:33:00') AND (?Date2:'2011-04-24 15:33:00')
GROUP BY DATE_FORMAT(click.date, '%Y-%m-%d %H:%i:00');

Я думаю, что единственный способ сделать это - создать временную таблицу? Каковы показатели производительности этого? Объединение в дату также не очень хорошо, потому что click.date может также иметь миллисекунды в datetime. Таким образом, DateFormat должен быть использован? Может быть, лучше в логике моего приложения, прочитать массив и заполнить пропущенные даты 0 значениями.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Я думаю, что ваше предложение заполнить пропущенные значения в логике вашего приложения - лучший выбор, чтобы избежать создания временной таблицы, особенно если вы все равно будете обрабатывать массив. Мы делаем то же самое в некоторых наших сервисах, которые мы написали.

1 голос
/ 29 апреля 2011

Для группировки по минутам вы можете использовать это предложение -

...
GROUP BY DAYOFYEAR(click.date), (60 * HOUR(click.date) + MINUTE(click.date))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...