You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询特定时间段内无成功登录记录的用户

解决:查询指定时间段内未成功登录的用户

原查询的问题

你的SQL写法有两个关键问题:

  • 左连接后在WHERE里加bb.LogDate的范围条件,会把没有登录日志的用户直接过滤掉——这类用户的bb.LogDate是NULL,不满足日期区间的判断条件,左连接的效果直接失效
  • 只判断bb.Status is null,会漏掉那些在指定时间段内只有登录失败(Status=0)记录的用户,这类用户其实也符合"未成功登录"的要求

正确的查询写法

方法1:用NOT EXISTS(推荐,性能更优)

SELECT *
FROM Users aa
WHERE NOT EXISTS (
    SELECT 1
    FROM Login_Log bb
    WHERE aa.UserId = bb.UserId
      AND bb.LogDate >= DATEADD(month, -1, GETDATE())
      AND bb.LogDate <= GETDATE()
      AND bb.Status = 1
)

直白说就是:找出所有不存在"过去1个月内成功登录记录"的用户,剩下的就是你要的——包括从来没登录过的用户,以及这段时间只登录失败的用户。

方法2:用LEFT JOIN + 筛选未匹配记录

SELECT aa.*
FROM Users aa
LEFT JOIN Login_Log bb 
    ON aa.UserId = bb.UserId
    AND bb.LogDate >= DATEADD(month, -1, GETDATE())
    AND bb.LogDate <= GETDATE()
    AND bb.Status = 1
WHERE bb.UserId IS NULL

这个思路是:把"过去1个月成功登录"的条件写在JOIN的ON子句里,左连接会保留所有用户,只有有成功登录记录的用户能匹配到bb表的数据;最后筛选出bb表数据为NULL的用户,就是没有成功登录记录的目标用户。

示例结果验证

假设当前日期是2022-06-01,过去1个月是2022-05-01至2022-06-01,用上面的查询会得到:
User1、User2、User3——User4在2022-05-02有成功登录记录,会被排除;User1、User2最近1个月没有成功登录,User3完全没有登录日志,都符合要求。

内容的提问来源于stack exchange,提问作者DooDoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:55:25