我如何编写一个SQL查询来查找过去几年中一直处于活动状态的用户?

时间:2015-05-22 13:46:38

标签: mysql sql

我的任务是从数据库中创建非活动用户列表。数据库具有一个表(用户)中的用户列表以及这些用户在另一个表(users_classdetails)中注册的类的列表。 users_classdetails页面包含userID和dateEntered(时间戳)的列。用户拥有典型的数据,如身份证,姓名,地址,电话等。

我需要一个SQL查询来获取过去三年没有注册过课程的用户列表。我可以获得三年多前注册课程的用户列表,但是如果他们最近注册了就不会考虑。什么是最好的解决方法?

用户表

id, username, firstName, lastName, email, phone, address

users_classdetails

id, userID, classID, dateEntered

2 个答案:

答案 0 :(得分:0)

列出user_classdetails中没有行且日期超过3年前的用户。 ANSI SQL样式:

select * from users u
where NOT exists (select 1 from users_classdetails uc
                  where u.id = uc.userID
                    and dateEntered > current_date - interval'3' year)

如果需要相反的情况,即列出过去3年内一直处于活动状态的所有用户,请切换到EXISTS。 但是身体说不活跃,然后切换到NOT EXISTS

答案 1 :(得分:0)

另一种方法是聚合结果并获得最大日期

SELECT s.*
FROM users s
JOIN (select userid, MAX(dateEntered) Max_date from users_classdetails GROUP BY userid) uc
ON s.id = uc.userid
AND uc.Max_date > DATE_ADD(CURDATE(), INTERVAL -3 YEAR)