我今天早些时候提出了类似的问题,但是我遇到了另一个需要帮助的问题。
我有一个日志记录系统,可以扫描服务器并为在给定时刻在线的每个用户编制目录。这是我的表格的样子:
-----------------
| ab_logs |
-----------------
| id |
| scan_id |
| found_user |
-----------------
id
是一个自动增量主键。除此之外没有其他实际价值。
scan_id
是一个整数,在每次成功扫描所有用户后递增。因此,我可以将结果与不同的扫描分开。
found_user
。存储扫描期间在线找到用户的位置。
以上将生成一个如下所示的表:
id | scan_id | found_user
----------------------------
1 | 1 | Nick
2 | 2 | Nick
3 | 2 | John
4 | 3 | John
所以在第一次扫描时,系统发现只有尼克在线。在第二天它发现了尼克和约翰。只有约翰仍然在线。
我的问题是,我想在每次扫描时连接到服务器的唯一身份总量。换句话说,我想要在每次扫描时连接的用户总数。想想反击。
从上面的例子中,我想从sql得到的结果是:
1
2
2
编辑:
这是我到目前为止所尝试过的,但它错了:
SELECT COUNT(DISTINCT(found_user)) FROM ab_logs WHERE DATE(timestamp) = CURDATE() GROUP BY scan_id
我尝试了什么回复:
1
2
1
答案 0 :(得分:2)
尝试使用group by子句:
SELECT scan_id, count(*)
FROM mytable
GROUP BY scan_id
答案 1 :(得分:2)
下面的代码应该为您提供所需的结果
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
它假设名称是唯一的,包括计数中的当前和每个先前扫描