【发布时间】:2011-03-02 10:23:25
【问题描述】:
我有一个查询要实现。
我有 2 个表:user 和 login_logs 表。
user 表如下所示:
身份证 || 名字 || 姓氏 || 电子邮件 || 用户名 || 激活 || 暂停
1 ||约翰 ||丹 || john@whatever ||约翰1 || 1 || 0 ||
2 ||迈克 ||赫特 || mike@whatever ||麦克1 || 1 || 0 ||
等等
login_logs 表如下所示:
id || login_datetime || user_id
1 || 2011-01-27 23:04:59 || 1
2 || 2010-01-27 23:04:59 || 2
等等
所以 login_logs 表会记录用户何时登录。
现在我要进行查询以选择所有非活动用户。非活跃用户是:
1) 90 天未登录的用户
2) 从未登录过的用户
我做了一个满足第一个条件但不完全正确的查询:
SELECT DISTINCT u.id, u.last_name, u.first_name, u.email,u.username
FROM users u INNER JOIN login_logs l ON l.user_id = u.id
WHERE u.activated = 1 AND u.suspended = 0 AND DATEDIFF(CURDATE(), l.login_datetime) <= 90
ORDER BY u.last_name, u.first_name, u.id
上面的查询不正确,因为如果我很久以前登录过,但最近它会将我视为非活动用户,因为它看到我很久以前登录过。
所以我想修正我上面描述的错误,同时满足第二个条件(选择从未登录过的人)。
【问题讨论】: