I have this table
visitors: ip,last_date (datetime)
When a different ip enters to the site in an specific day, it insert a new row, no matter if the ip is entering again.
Whit this sql statement I retrieve all unique ip visits in my site. It works for an specific day, for example today (26/05/2020) and it grouped it by ip
SELECT v.*, max(last_date) as last_date1 FROM visitors as v WHERE date(v.last_date) = :today GROUP BY v.ip ORDER BY last_date1 DESC
Now I want to make an small daily report
SELECT COUNT(*) as count, DATE(last_date) AS last_date1 FROM visitors WHERE 1 GROUP BY YEAR(last_date), MONTH(last_date), DAY(last_date) ORDER BY last_date1 DESC
count
retrieves all the times a especific ip has entered during the whole day. I jut want it to count it as 1.
OUTPUT
26/05/2020 76455 25/05/2020 34561 24/05/2020 45642
I want to retrieve unique ip visits. not the sum of the times every ip has entered during the day.
EXPECTED RESULT
26/05/2020 676 25/05/2020 543 24/05/2020 711
How can I fix this?
Advertisement
Answer
I think that you want aggregation and count(distinct ip)
.
select date(last_date) visit_day, count(distinct ip) no_visiting_ip from visitors group by date(last_date) order by visit_day desc
This counts how many unique ip
s visited the site on each day. If you want the overall count of visits (regardless of whether the same ip
visited more than once), then you can use count(*)
instead.