У меня есть ситуация, когда пользовательские просмотры и клики по баннеру происходят с разных ip. Я регистрирую идентификатор сессии - текущий сеанс просмотра страницы. И я хочу посчитать, сколько кликов за один сеанс не соответствует ip просмотров.
Существующие данные:
date view click session_id ip
------------------------------------------------------
"2020-02-03" 1 0 111111 8.8.8.8
"2020-02-03" 0 1 111111 4.4.4.4
"2020-02-04" 1 0 222222 9.9.9.9
"2020-02-04" 0 1 222222 9.9.9.9
"2020-02-05" 1 0 333333 10.10.10.10
"2020-02-05" 0 1 333333 11.11.11.11
"2020-02-05" 1 0 444444 12.12.12.12
"2020-02-05" 0 1 444444 13.13.13.13
"2020-02-05" 1 0 555555 14.14.14.14
Ожидаемый результат:
date same_session_but_different_ip_count
---------------------------------------------------
"2020-02-03" 1
"2020-02-04" 0
"2020-02-05" 2
Мой способ состоял в том, чтобы записать все сеансы просмотра за месяц в переменную $view_sessions
и все просмотры ip в переменная $view_ip
и считать следующим образом:
SELECT
date, count(*)
FROM Table
WHERE
date >="2020-02-01" and date<="2020-02-31"
click = 1 and
session_id in $view_sessions and
ip not in $view_ip
group by
date
order by count(*)
Есть ли более изящный способ решения этой задачи?