sql查询以根据日期范围查找特定条目

时间:2020-10-28 16:57:30

标签: sql oracle datetime date-arithmetic having-clause

我有一个数据库,该数据库的表包含所有帐户的登录时间历史记录。该表包括USERID和LOGIN_DATE列。我想查找那些没有登录超过60天的用户,因此显示了一个SQL查询

查找登录日期超过60天但在60天内没有条目的用户

有人可以建议我怎么做吗?

3 个答案:

答案 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())