id | dates | times | ip
1 2011-09-14 08:24:32 192.168.1.1
задача:
Выбрать количество уникальных ip записей за день, после сгруппировать эти записи по месяцам за выбранный диапазон времени
т.е. должны получить
количество | месяц
15 8
2 9
1 10
5 12
Вот до чего дошел
SELECT COUNT(DISTINCT ip) cnt, MONTH(`dates`) dt FROM `table` WHERE `dates` BETWEEN '2011-01-01' AND '2011-12-31' GROUP BY `dates`
выводит не совсем то, что нужно
помогите советом или примером
Спустя 5 минут, 59 секунд (28.09.2011 - 23:22) Winston написал(а):
Цитата (Vavilon79 @ 28.09.2011 - 23:16) |
SELECT COUNT(DISTINCT ip) cnt, MONTH(`dates`) dt |
В селекте должно использоваться as для псевдонимов
SELECT COUNT(DISTINCT ip) AS cnt, MONTH(`dates`) AS dt
Спустя 5 минут, 13 секунд (28.09.2011 - 23:27) Vavilon79 написал(а):
Цитата |
В селекте должно использоваться as для псевдонимов |
это не обязательно и без них работает.
Спустя 18 минут, 47 секунд (28.09.2011 - 23:46) Игорь_Vasinsky написал(а):
А так пробывал?
mysql_query("SELECT COUNT(DISTINCT ip) cnt, MONTH(`dates`) dt") or die (mysql_error());
Спустя 15 минут, 27 секунд (29.09.2011 - 00:01) Vavilon79 написал(а):
нет, не пробовал. только не пойму что это даст таблица не указана или сказать какая высветится ошибка. я запросы выполняю прямо в phpMyAdmin
Спустя 38 минут, 18 секунд (29.09.2011 - 00:40) Игорь_Vasinsky написал(а):
И что выводит как надо?
Спустя 8 часов, 10 минут, 3 секунды (29.09.2011 - 08:50) Vavilon79 написал(а):
к сожалению нет.
вот кому будет интересно, додумал не сам, помогли.
вот кому будет интересно, додумал не сам, помогли.
select MONTH(`dates`), sum(cnt) cnt
from
(SELECT COUNT(DISTINCT ip) cnt, `dates`
FROM `table`
WHERE `dates` BETWEEN '2011-01-01' AND '2011-12-31'
GROUP BY `dates`) a
group by MONTH(`dates`)