SQL查询以查找过去120天内未登录的用户

SQL查询以查找过去120天内未登录的用户,sql,sql-server,datetime,null,Sql,Sql Server,Datetime,Null,使用SQL Server。我有两个表,都有一个名为UserID的列。第一个是用户,第二个是审计。Users表有一个716个不同用户的列表,我的目标是查找在过去120天内未出现在Audits表中的所有用户Audits表中有一个名为DateTime的列。运行查询: Select distinct UserID from Audits Where DateTime > GETDATE() -120 我得到了315个结果。我知道我可以将其与Users表上的716个UserID字段进行比较,但我很

使用SQL Server。我有两个表,都有一个名为UserID的列。第一个是用户,第二个是审计。Users表有一个716个不同用户的列表,我的目标是查找在过去120天内未出现在Audits表中的所有用户Audits表中有一个名为DateTime的列。运行查询:

Select distinct UserID
from Audits
Where DateTime > GETDATE() -120
我得到了315个结果。我知道我可以将其与Users表上的716个UserID字段进行比较,但我很难弄清楚这一点,我想让我的客户能够在任何时候运行,只要他们想查看他们想要禁用的用户。这就是我所尝试的:

Select *
from Users
Where UserID Not In
    (select distinct UserID
    from Audits
    where DateTime > GETDATE() -120)
这返回了0个结果,而不是415个。。。我想也许我需要指定列,所以我也尝试:

Select *
from Users
Where Users.UserID Not In
    (select distinct Audits.UserID
    from Audits
    where Audits.DateTime > GETDATE() -120)
有什么建议吗

这返回了0个结果,而不是415个

审计表可能包含UserID=NULL的记录,在这种情况下,notin将失败。您可以使用不存在的查询:


您可以尝试以下查询:

select u.* from 
           (select * from audit where lastlogin > GETDATE() -120 )a 
             right outer join users u
             on a.userId = u.userId
 where a.userId is null
select u.* from 
           (select * from audit where lastlogin > GETDATE() -120 )a 
             right outer join users u
             on a.userId = u.userId
 where a.userId is null