我今天早些时候问了一个类似的问题,但我遇到了另一个需要帮助的问题。
我有一个日志系统,可以扫描服务器并对在给定时刻在线的每个用户进行分类。这是我的表格的样子:
-----------------
| ab_logs |
-----------------
| id |
| scan_id |
| found_user |
-----------------
id
是一个自动递增的主键。除此之外没有任何实际值(value)。
scan_id
是一个整数,每次成功扫描所有用户后递增。这样我就可以将不同扫描的结果分开。
found_user
。存储在扫描期间发现哪些用户在线。
以上将生成一个如下所示的表格:
id | scan_id | found_user
----------------------------
1 | 1 | Nick
2 | 2 | Nick
3 | 2 | John
4 | 3 | John
所以在第一次扫描系统时发现只有 Nick 在线。 2 日,它找到了尼克和约翰。 3 日,只有约翰还在线。
我的问题是我想在每次扫描时获取连接到服务器的唯一用户总数。换句话说,我想要每次扫描时连接的用户总数。思考计数器。
从上面的例子来看,我想从sql中得到的结果是:
1
2
2
编辑:
这是我到目前为止尝试过的方法,但它是错误的:
SELECT COUNT(DISTINCT(found_user)) FROM ab_logs WHERE DATE(timestamp) = CURDATE() GROUP BY scan_id
我试过的结果是这样的:
1
2
1
最佳答案
下面的代码应该会给你你正在寻找的结果
select s.scan_id, count(*) from
(select distinct
t.scan_id
,t1.found_user
from
tblScans t
inner join tblScans t1 on t.scan_id >= t1.scan_id) s
group by
s.scan_id;
这里是 sqlFiddle
它假定名称是唯一的,并且在计数中包括当前和以前的每一次扫描
关于MySQL 计算最大组数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698615/