我使用的是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;

10-08 04:21