【发布时间】:2015-05-05 07:24:13
【问题描述】:
一个表users 有三列:id, name, pass。
另一个表logins 有一个user_id 列,一个isright boolean (tinyint) 列表示登录是否成功,还有一个date 列。
我需要一个简单的left join 来获取用户名和密码(1)、上次登录日期时间(成功与否)(2) 和自上次成功登录以来特定用户的登录次数(3)。
(1)和(2)我可以使用
SELECT name, pass, MAX(date)
FROM users
LEFT JOIN logins ON logins.id = users.id
-- here either "GROUP BY users.id" or "WHERE users.id = 1234"
但是(3)似乎更难。我用谷歌搜索并发现了许多类似的问题,但没有一个是在询问在特定条件为真后如何计算行数。 (这更复杂 - 计算那个用户的登录,而不是每个人)
我什至不知道如何在单独的查询中执行此操作(我更喜欢对 3 件事进行一次查询,而且我想我必须使用子查询,尽管我更喜欢联接)。
SQL 处理表格和一些数据:http://sqlfiddle.com/#!9/a932b
有什么想法吗?
【问题讨论】:
-
您是否尝试过使用子查询获取上次成功登录的日期/时间,然后只计算日期/时间之后的日期/时间?如果您能给我描述一下您的两张桌子,我可能会提供更多帮助
-
考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果。
-
@JeremyC。 - 这是一个带有一些示例数据的 sqlfiddle:sqlfiddle.com/#!9/a932b
标签: mysql sql subquery left-join