【发布时间】:2011-02-10 17:54:05
【问题描述】:
我有一个名为 sys_event_log 的表,其中包含以下列:
用户名, 事件类型, 事件消息, 时间戳
使用“登录成功”或“注销事件”的 event_type 跟踪登录和注销事件
在 Access 中使用 SQL 我试图根据事件日志 event_types 和 time_stamps严格返回已登录到数据库但尚未注销的不同用户的列表。
到目前为止我提出的查询是:
SELECT DISTINCT
a.user_name,
a.event_type,
a.time_stamp
FROM
sys_event_log a
WHERE NOT EXISTS
(
SELECT
1
FROM
sys_event_log b
WHERE
b.time_stamp > a.time_stamp
AND a.user_name = b.user_name
AND a.event_type = "Logout Event"
)
AND a.event_type = "Login Success";
感觉很接近,但没有返回预期的数据集。
【问题讨论】:
-
如果您允许同一用户同时进行多个连接,这是否可以正常工作?
-
@ypercube 这有关系吗?如果发生这种情况,有 2 个结果(1)最后一个条目是注销 => 用户未列出(2)在最后一个注销后有多个登录 => 用户多次列出 每次登录一次
-
所以,如果我们在 event_log 中有: login, login, login, logout ,那么当他仍然有 2 个活动登录时,用户不会被列出。对吗?
-
回答问题。是的。可以多次打开应用程序...但他们必须从共享目录中创建多个副本才能这样做。