我使用的是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查询,每天生成总数为“唯一”的登录(同一工作人员在同一天的几次登录应视为一个事件)。
以下查询:
select count(logeventid) as logincount, logday from logevent
group by logday
order by logday
第5天将显示logincount = 4。因为它两次计数了id = 3的工人。虽然我必须只计算不同的工作人员登录。因此,我需要一个查询,在第5天仅产生3次登录。
最佳答案
您想每天计算不同的用户:
select logday, count(distinct workerid) as logincount
from logevent
group by logday
order by logday;