我有一个图表,按日期(今天每小时)显示基于 IP 组的唯一访问者。
现在我想根据 IP 和 session_id 将这些数据分离给新访问者和回访者,并按日期(今天每小时)对它们进行分组。如何使用 SQL 查询来做到这一点?甚至可能吗?
如果带有 session_id 的 IP 已经存在,查询应该在表格中查找。然后是回访者。否则就是新访客。我不知道该怎么做。
查询我今天必须计算唯一 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 的表中。 Returning 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