У меня есть график, показывающий мне уникальных посетителей на основе группы IP по дате (сегодня каждый час).
Теперь я хочу разделить эти данные для новых посетителей и вернувшихся посетителей по IP и session_id и сгруппировать их по дате (сегодня каждый час). Как я могу сделать это с помощью SQL-запроса? Это вообще возможно?
Запрос должен смотреть в таблице, если IP с session_id уже там. Значит, это возвращающийся посетитель. В противном случае это новый посетитель. Я не знаю, как это сделать.
Запрос Сегодня я должен подсчитать уникальные IP-адреса и сгруппировать их по часам:
SELECT DISTINCT DATE_FORMAT(`date`, '%Y-%m-%d %H') as 'dates', COUNT(DISTINCT `ip`) as 'count' FROM `logging` WHERE DATE(date) = DATE(NOW()) GROUP BY `dates`
Теперь он показывает мне:
Dates Count
2021-02-04 00 10
2021-02-04 01 8
2021-02-04 02 5
и т.п.
Я хочу:
Dates Count new IP Count returning IP
2021-02-04 00 2 8
2021-02-04 01 4 4
2021-02-04 02 2 3
Новый IP: проверьте, хранится ли IP в таблице только с одним известным session_id. Возврат IP: проверьте, хранится ли IP в таблице с несколькими разными идентификаторами session_id.
Спасибо заранее!
ОБНОВЛЕНИЕ №1:
Теперь у меня есть следующий запрос, чтобы подсчитать вернувшихся посетителей сегодня:
SELECT date, ip, count(distinct ip, session_id) as 'count' FROM logging GROUP BY ip HAVING count > 1 AND date(date) = date(now())
Результат например:
date ip count (returning visitors)
2021-02-05 08:24:56 62.163.91.178 2
2021-02-05 10:24:15 77.163.91.223 6
2021-02-05 08:49:51 77.173.17.157 13
Как я могу изменить этот запрос, чтобы сгруппировать их по дате, чтобы получить это ?:
date count (returning visitors)
2021-02-05 08 15
2021-02-05 10 6
ОБНОВЛЕНИЕ №2:
Благодаря Tsungur я отправил следующий запрос, но он показывает разные результаты каждый раз, когда я его запускаю.
select DATE_FORMAT([date], '%Y-%m-%d %H') as [date] , count(*) from ( SELECT [date], ip, count(distinct ip, session_id) as 'count' FROM logging GROUP BY ip HAVING count(distinct ip, session_id) > 1 AND date(date) = date(now())
) as sub
group by DATE_FORMAT([date], '%Y-%m-%d %H')
Вот некоторые данные, с которыми можно поиграть:
ID session_id ip date
10752 454747k5k45l23h3b5n6k432nn 44.56.123.123 2021-01-01 09:15:54
10950 kmcoq3glgm187uhsfmo3r71h9q 86.85.131.246 2021-02-11 13:19:22
10958 kmcoq3glgm187uhsfmo3r71h9q 86.85.131.246 2021-02-12 12:10:52
10960 dfh78dfh7fdh7fdh6sd55dsd88 86.85.131.246 2021-02-12 13:00:02
10967 87s97sfh57sh6sh6s6sdsd44d3 11.56.873.560 2021-02-13 13:00:00
10968 rkdrgjsd7gjsd5jskjd46kjdsk 66.35.127.435 2021-02-13 13:01:00
10977 rkdrgjsd7gjsd5jskjd46kjdsk 66.35.127.435 2021-02-13 13:03:11
10978 dfajesj9sdj0dfh78sgd57sd5d 44.56.123.123 2021-02-13 13:05:12
10979 fhdf7f7hdf6fd44fdf3ffdf321 86.85.131.246 2021-02-13 14:05:02
10980 fhdf7f7hdf6fd44fdf3ffdf321 86.85.131.246 2021-02-13 14:06:13
Приведенные выше данные должны показать мне:
date count (new visitor)
2021-02-13 13 2
2021-02-13 14 0
date count (returning visitor)
2021-02-13 13 1
2021-02-13 14 1