Заголовок не очень хорошо описывает это, но предполагает следующую упрощенную таблицу в базе данных Mysql 5:
access
access_id | ip | date | browser
---------------------------------------------
int | char(40) | date | varchar(255)
как мне найти наиболее оптимальный способ определения количества пользователей, впервые использующих Интернет (путем ip игнорирования NAT-маршрутизации и нескольких людей, посещающих с одного IP-адреса) и их браузера, посещающего сайт в промежутке между датами. I.e.:
SELECT count(browser), browser
FROM access
WHERE date > '2011-11-1' AND date < '2011-12-1'
AND ip NOT IN (SELECT ip FROM access WHERE date < '2011-11-1')
GROUP BY browser
даст мне все ips и браузеры для пользователей, которые не посещали сайт до ноября 2011 года - однако, если пользователь посетил сайт дважды в ноябре, он будет подсчитывать их дважды, и я хочу подсчитать их только один раз. Я думаю, что могу исправить это с помощью другого уродливого подвыбора, но я ищу наиболее оптимальный способ выполнить запрос, поскольку в таблице много строк.