【发布时间】:2016-06-19 22:09:53
【问题描述】:
我有一个表 user_log,我在其中存储有关用户活动的信息,例如登录和注销操作。 表格有四列:id、user_id、action和timestamp
我想在一个结果表中选择一些 user_id 的所有注销和登录操作时间戳,会有这样的列:
user_id login_timestamp logout_timestamp。
我使用这个 MySQL 查询:
SELECT
user_log.user_id,
user_log_login.login_timestamp,
user_log_logout.logout_timestamp
FROM
user_log
INNER JOIN
(SELECT
user_id, timestamp as login_timestamp
FROM
user_log
WHERE
action = 'login successful') as user_log_login
ON
user_log.user_id = user_log_login.user_id
INNER JOIN
(SELECT
user_id, timestamp as logout_timestamp
FROM
user_log
WHERE
action = 'logout successful') as user_log_logout
ON
user_log.user_id = user_log_logout.user_id
WHERE
user_log.user_id = 4
【问题讨论】:
-
是的,因为
user_id = 4有多个logout_timestamp。 -
@MotoGP 我有相同数量的登录和注销时间戳。选择 Distinct using with () 给我语法错误,但没有括号我遇到了与发布的相同的问题。
-
我认为你会得到一个给定用户的登录和注销时间戳的交叉连接结果。您需要添加更多过滤条件。