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

MySQL查询修正:获取指定日期前登录但之后未登录的用户

解决登录日志查询逻辑错误:找出指定日期前登录但之后未登录的用户

嘿,我看了你的SQL和需求,问题出在逻辑完全写反了,咱们一步步捋清楚:

原SQL的问题分析

你的需求是找「2017-04-07前登录过,但之后没登录的用户」,但原SQL做了相反的事:

  • 子查询里找的是所有在2017-04-07前登录过的用户,然后外层用NOT IN,这就变成了筛选「从来没在2017-04-07前登录过的用户」,完全背离需求。
  • 外层查询没有先过滤出「至少有一次在2017-04-07前登录」的用户,哪怕子查询改对了,结果也会包含不符合前提的用户。

修正方案(两种常用写法)

写法1:分组取用户最后登录日期(最直观)

通过分组统计每个用户的最后登录时间,只要最后登录时间早于指定日期,就满足「之前登录过、之后没登录」的条件:

SELECT user_login
FROM wp_login_log_backup
GROUP BY user_login
HAVING MAX(date) < '2017-04-07 00:00:00';

如果需要同时统计该用户的登录次数,也可以加上计数字段:

SELECT user_login, COUNT(*) AS login_count
FROM wp_login_log_backup
GROUP BY user_login
HAVING MAX(date) < '2017-04-07 00:00:00';

写法2:用NOT IN(贴合你的原始思路调整)

先筛选出「在2017-04-07前登录过的用户」,再排除掉「在2017-04-07及之后登录过的用户」:

SELECT DISTINCT p.user_login
FROM wp_login_log_backup p
WHERE p.date < '2017-04-07 00:00:00'
AND p.user_login NOT IN (
    SELECT u.user_login
    FROM wp_login_log_backup u
    WHERE u.date >= '2017-04-07 00:00:00'
);

这里用DISTINCT是因为一个用户可能有多次早于指定日期的登录,避免结果重复。

验证结果

用你的日志数据测试,这两种写法都会返回timothybrown、robinbiundo(注:日志里abigailrashbaum的所有登录都在2016年,也符合条件,如果不需要她,可能需要额外过滤条件,但按照你的需求描述,这两个写法是符合逻辑的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:31