I have an interesting query I need to do. I have a table with an INT
column containing ip address numbers (using INET_ATON
), and a timestamp
column. I want to be able to count the number of unique ip address columns there are per day. That is, how many distinct ip rows there are in each day. So, for example, if an ip address is in the same day twice, it counts as 1 in the final count, however if the same ip address is in another day it'll be counted there will be a second count for it.
PK | FK | ipNum | timestamp
11 | 404 | 219395 | 2013-01-06 22:23:56
7 | 404 | 467719 | 2013-01-06 22:23:41
8 | 404 | 4718869 | 2013-01-06 22:23:42
10 | 404 | 16777224 | 2013-01-06 22:23:56
5 | 404 | 1292435475 | 2013-01-06 22:23:25
12 | 404 | 1526990605 | 2013-01-06 22:23:57
6 | 404 | 1594313225 | 2013-01-06 22:23:40
4 | 404 | 1610613001 | 2013-01-06 22:23:23
9 | 404 | 1628635192 | 2013-01-06 22:23:55
1 | 404 | 2130706433 | 2013-01-06 21:29:38
2 | 407 | 2130706433 | 2013-01-06 21:31:59
3 | 407 | 2130706433 | 2013-01-06 21:32:22
SELECT DATE(timestamp) Date, COUNT(DISTINCT ipNum) totalCOunt
FROM tableName
GROUP BY DATE(timestamp)
Here's how you'd get counts per day for the last 7 days:
select
count(*) as count,
date(timestamp) as date
from
tablename
where
timestamp >= date_sub(curdate(), interval 7 day)
group by
date;
+-------------+------------+
| count | date |
+-------------+------------+
| #forThatDay | 2020-02-21 |
| #forThatDay | 2020-02-22 |
| #forThatDay | 2020-02-22 |
| #forThatDay | 2020-02-23 |
| #forThatDay | 2020-02-24 |
| #forThatDay | 2020-02-25 |
| #forThatDay | 2020-02-26 |
+-------------+------------+
7 rows in set (0.03 sec)
group by the ipNum
column first to get distinct counts of that column per day:
select
count(*) as count,
date(timestamp) as date
from
tablename
where
timestamp >= date_sub(curdate(), interval 7 day)
group by
ipNum, date;
$log_date = date('Y-m-d H:i:s');
$log_date = date('Y-m-d H:i:s', strtotime($log_date.' -1 hour'));
SELECT ipNum, COUNT(ipNum), COUNT(DISTINCT ipNum), DATE(timestamp), timestamp FROM tableName WHERE `timestamp` > '".$log_date."' GROUP BY ipNum ORDER BY DATE(timestamp) DESC
THIS WILL GIVE YOU A RESULT LIKE
ip TIME COUNTIPS
11.237.115.30 2018-01-27 19:13:51 1
21.744.133.52 2018-01-27 19:14:03 1
44.628.197.51 2018-01-27 19:48:12 14
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.