найти общее количество уникальных хитов для каждого продукта - PullRequest
3 голосов
/ 24 июня 2011

У меня есть структура таблицы следующим образом

    id            productid             ip               hittime
 ---------------------------------------------------------------------------
     1                5               1.1.1.1           2011-05-03 06:55:11
     2                5               1.1.1.1           2011-05-03 06:57:11
     3                6               2.2.2.2           2011-05-03 07:30:00
     4                4               1.1.1.1           2011-05-03 07:32:54
     5                5               2.2.2.2           2011-05-03 07:55:00

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

     productid              totalhits                uniquehits
 ------------------------------------------------------------------
        4                       1                        1
        5                       3                        2
        6                       1                        1

Критерии для

Всего хитов = все записи, которые относятся к определенному продукту

Уникальные хиты = 2 хита идентифицируются как уникальные хиты, если (1) IP отличается или (2) для того же ip, разница составляет 5 минутво время обращения

Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

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

select productid, count(*) totalhits, 
    count(distinct 
        concat(ip,
            date_format(hittime, '%Y%m%d%H'),
            round(date_format(hittime, '%i') / 5) * 5)
        ) uniquehits
from table
group by productid

Изменения, которые я внес в идею rMX:

  1. Изменен ceil () наround (), потому что ceil / floor приведет к неправильной обработке крайних случаев
  2. Умножим результаты round () на 5. Я думаю, что rMX хотел это сделать, и просто забыл его напечатать.

РЕДАКТИРОВАТЬ: Умножение на 5 действительно не нужно.Мой мозг был просто запутан.Изменение ceil () на round () все еще имеет значение.

1 голос
/ 24 июня 2011

UPD>

select productid, count(*) totalhits, 
    count(distinct 
        concat(ip,
            date_format(hittime, '%Y%m%d%H'),
            ceil(date_format(hittime, '%i') / 5))
        ) uniquehits
from table
group by productid

Я думаю, это должно работать. Извините, не было времени проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...