我有一个数据库,该数据库的表包含所有帐户的登录时间历史记录。该表包括USERID和LOGIN_DATE列。我想查找那些没有登录超过60天的用户,因此显示了一个SQL查询
查找登录日期超过60天但在60天内没有条目的用户
有人可以建议我怎么做吗?
答案 0 :(得分:0)
您可以使用汇总,并过滤最长登录日期超过60天的用户:
select userid
from mytable
group by userid
having max(login_date) < current_date - interval '60' day
您没有告诉您正在使用哪个数据库,因此它使用标准的日期算术。您可能需要根据实际数据库进行调整(所有主要数据库都有替代方法)。
现在该问题被标记为Oracle。以上工作;您可能希望截断日期的时间部分以检查整天。而且,如果您要显示最后一次登录,只需将聚合函数添加到select
子句中即可:
select userid, max(login_date) last_login_date
from mytable
group by userid
having max(login_date) < trunc(current_date) - interval '60' day
答案 1 :(得分:0)
您可以使用聚合:
select userid
from t
group by userid
having max(logindate) < trunc(sysdate) - interval '60' day;
众所周知,日期/时间函数是特定于数据库的,因此Have子句的确切语法可能取决于您的数据库。
答案 2 :(得分:0)
以下可能是解决方案
select USERID, min(login_date) mind, max(login_date) maxd
from Logins
group by UserId
having max(login_date) < dateadd(d,-60,getdate())