我正在使用Firebird数据库,但使用大多数其他数据库引擎的SQL语法的答案也是可以接受的。
我有两张桌子:
WORKER
workerid: integer
worker names and so ot.
LOGEVENT
logeventid: integer
logday: integer
workerid: integer
因此,LOGEVENT表用于跟踪工作人员登录。 为简单起见,我使用logday作为整数,表示登录日。例如,它可能是一年中从1到365的一天。
因此,典型的日志表可能如下所示:
logeventid logday workerid
1 5 3
2 5 4
3 5 3
4 5 7
5 6 4
6 6 3
7 6 4
正如所见,id = 3的工人在第5天进行了两次登录。
现在我需要创建一个SQL查询,产生" unique"的总数。每天登录(同一天中同一工人的几次登录应算作一次事件)。
以下查询:
select count(logeventid) as logincount, logday from logevent
group by logday
order by logday
第5天将显示logincount = 4。因为它计算id = 3的worker两次。虽然我必须只计算不同的工人登录。所以,我需要一个查询,第5天只能生成3次登录。
答案 0 :(得分:4)
您希望每天统计不同的用户:
select logday, count(distinct workerid) as logincount
from logevent
group by logday
order by logday;
答案 1 :(得分:3)
您想要计算每天不同的工人数。所以你需要这个查询:
select count(DISTINCT workerid) as logincount, logday from logevent
group by logday
order by logday
答案 2 :(得分:1)
select count(logeventid) as logincount, logday from logevent
group by logday, workerid
order by logday
on worker上的额外分组应该消除双重登录。