我有一个数据库,其中有一个包含所有帐户登录时间历史记录的表。该表包括USERID和LOGIN_DATE列。我想找到那些超过60天没有登录的用户,所以SQL查询显示
查找登录日期大于60天前,但没有输入任何日期超过60天前的用户
有人能建议我怎么做吗?
以下可以是的解决方案
select USERID, min(login_date) mind, max(login_date) maxd
from Logins
group by UserId
having max(login_date) < dateadd(d,-60,getdate())
您可以使用聚合,并对最长登录日期超过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
您可以使用聚合:
select userid
from t
group by userid
having max(logindate) < trunc(sysdate) - interval '60' day;
众所周知,日期/时间函数是特定于数据库的,因此hasing子句的确切语法可能取决于您的数据库。