【发布时间】:2023-04-11 04:07:01
【问题描述】:
我使用的是 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 次登录的查询。
【问题讨论】:
-
猜你应该重新提出这个问题。 “独特的登录事件”正是“A. van Esveld”告诉你的——任何人,无论是同一个人还是其他人,穿过门的次数。每次开门 - 这是一个独特的事件。您需要的似乎是告诉每天有多少不同的工作人员登录,而不是唯一的登录事件,这是 LiveJournal 的“社会资本”
-
我同意这个问题没有得到清楚的解释。但我举了一个例子。是的,我需要计算每天的工作人员登录总数,但每个工作人员必须只计算一次(一天内)。 (这就是您在第二个变体中很好解释的内容:“每天有多少不同的工作人员登录”)。
-
然后编辑你的 Q 并改写它,以便将来其他人可以谷歌并找到它:-D