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

问题描述

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

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

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

解决方法

您可以使用汇总,并过滤最长登录日期超过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;

众所周知,日期/时间函数是特定于数据库的,因此Have子句的确切语法可能取决于您的数据库。

,

以下可能是解决方案

select USERID,min(login_date) mind,max(login_date) maxd
from Logins
group by UserId
having max(login_date) < dateadd(d,-60,getdate())

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...