我有这个表例如
IP ADDRESS | DATE
10.10.10.10 | 2014-09-01
10.10.10.10 | 2014-09-12
44.33.33.33 | 2014-09-12
10.10.10.10 | 2014-09-15
44.33.33.33 | 2014-09-16
33.10.31.33 | 2014-09-18
89.99.11.22 | 2014-09-18
44.33.33.33 | 2014-09-19
33.10.31.33 | 2014-09-22
10.10.10.10 | 2014-09-24
我想从表中得到的是
TOTAL UNIQUE IP | DATE
1 | 2014-09-01 <-- 10.10.10.10
1 | 2014-09-12 <-- 44.33.33.33
2 | 2014-09-18 <-- 33.10.31.33 and 89.99.11.22
请帮帮我:)。
规则:
第一次访问ipaddress后忽略
抱歉我的英文不好
答案 0 :(得分:2)
按日期分组的聚合,仅计算不同的IP地址:
SELECT
COUNT(DISTINCT t1.ip_address),
t1.date
FROM table t1
WHERE NOT EXISTS(
SELECT ip_address
FROM table
WHERE t1.ip_address = t2.ip_address AND t1.date < t2.date
LIMIT 1)
GROUP BY t1.date
ORDER BY t1.date
如果您想查看地址:
SELECT
COUNT(DISTINCT ip_address),
date,
GROUP_CONCAT(DISTINCT ip_address)
FROM table
GROUP BY date
答案 1 :(得分:1)
来自@DanFromgermany的精炼答案
SELECT
COUNT(DISTINCT ip_address),
date
FROM table t1
where ip_address not in (select ip_address from table t2 where t2.date < t1.date)
GROUP BY date
答案 2 :(得分:0)
SELECT ip_address, MIN(`date`), COUNT(DISTINCT `date`)
FROM `table`
GROUP BY ip_address;
(顺便说一句,将ip地址存储为虚线四字符串几乎总是一个坏主意)
如果ip地址的数量相对于记录数小(小于2%,取决于表和索引结构),那么NOT EXISTS子句将比这里描述的全表扫描更有效。