MySQL Получить строки между месяцами

Я пытаюсь ВЫБРАТЬ посетителей моего сайта в месяц за текущий год.

Для каждой другой комбинации IP/user_agent будет добавляться строка в минуту. Для отслеживания просмотров и уникальных посетителей.

Моя схема выглядит так:

CREATE TABLE `stats` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `domain` varchar(40) NOT NULL,
    `ip` varchar(20) NOT NULL,
    `user_agent` varchar(255) NOT NULL,
    `domain_id` int(11) NOT NULL,
    `date` timestamp NOT NULL default CURRENT_TIMESTAMP,
    `referrer` varchar(400) default NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Теперь я хотел бы получить всех уникальных посетителей за все месяцы данного года.

Но я бы хотел, чтобы уникальные посетители были уникальными только в течение 24 часов. Так что не на весь месяц.

Можно было бы просто использовать дату >= СЕЙЧАС () - ИНТЕРВАЛ 1 МЕСЯЦ), но после января 2009 года это перейдет к декабрю 2008 года. Таким образом, он должен отображать только месяцы данного года.

Есть ли функция делать то же самое в течение месяца (подсчет посетителей в неделю, то есть 4 строки с первой по четвертую неделю)?

Спасибо!


person Henk Denneboom    schedule 22.08.2009    source источник


Ответы (1)


Вы хотите получить количество уникальных посетителей для каждого сайта в месяц? Что-то вроде этого должно работать:

SELECT COUNT(*), domain_id, m, y FROM
(
    SELECT ip, user_agent, COUNT(ID) AS hits, domain_id,
        DAY(date) as d, MONTH(date) as m, YEAR(date) as y
    FROM `stats`
    GROUP BY domain_id, ip, d, m, y
) AS tb
GROUP BY tb.m, tb.y

Сначала он группируется по дням в подзапросе, затем снова группируется по месяцам в окружающем запросе.

Я не совсем уверен, каково было ваше намерение, но вы должны быть в состоянии адаптировать эту технику для своей цели.

(изменить: добавлен компонент года в запрос)

person Mick    schedule 22.08.2009
comment
Спасибо Мик! Работает отлично! Есть ли способ сделать то же самое для часов (последние 24) и последних семи дней? Спасибо - person Henk Denneboom; 22.08.2009
comment
Вам придется добавить дополнительный столбец, но есть функция HOUR, такая же, как DAY, MONTH и YEAR. - person Mick; 27.08.2009