Group by substring - возможно ли такое?

BoBka-altRUist

Новичок
Добрый день, возникла необходимость вывести статистику посещений за день по часам с разных ip с группировкой по этому ip

т.е. нужно узнать сколько человек зашли с определенных ip за каждый час, я пробую делать так:

SELECT COUNT(s.`ip`) as s_num, s.*, ... FROM `statistics` AS s LEFT JOIN ... WHERE (s.`date` BETWEEN '2010-12-19 00:00:00' AND '2010-12-19 23:59:59') AND ... GROUP BY SUBSTRING(`date`,0,13), `ip`

на места где многоточие не обращайте внимание, пусть вся информация в одной базе, без дополнительных условий.
т.к. у меня в базе нет поля типа '2010-12-19 00' где ГГГГ-ММ-ДД чч по которому можно было бы группировать, можно ли группировать по подстроке поля date формата ГГГГ-ММ-ДД чч:мм:сс, или же это извращение (за которое надо сжечь меня на костре) или все же при помощи php "пробегать" и отсеивать? или есть другой способ?
 

BoBka-altRUist

Новичок
prolis Спасибо!

для последователей:

SELECT COUNT( s.`ip` ) AS s_num, DATE_FORMAT( s.`date` , '%Y-%m-%d %H' ) AS s_date, s.*, ... FROM `statistics` AS s LEFT JOIN ... WHERE (s.`date` BETWEEN '2010-12-19 00:00:00' AND '2010-12-19 23:59:59') AND ... GROUP BY DATE_FORMAT( s.`date` , '%Y-%m-%d %H' ), `ip`

а все же если бы это было какое-то поле (другого типа - не дата) то можно было бы сгруппировать по части содержимого этого поля?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
BoBka-altRUist
Еще пускай последователи експлайн запроса сделают и офигеют
 

BoBka-altRUist

Новичок
Mr_Max что ты предлагаешь?

(понятно что лучше сделать такое поле по которому группировать и ключ добавить) но у меня там мало ip (это мобильный оператор) там их порядка пятидесяти
 

prolis

Новичок
если задача типовая, для боевой отчетности можно создать агрегат (деньчас, ip, count) с праймари кеем по первым двум полям и добавлять туда новые записи по истечении часа
 
Сверху