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

MySQL如何查询用户在上个月和本月是否均有登录记录

首先假设你的表名为 user_login,如果实际表名不同请自行替换。

查询语句

SELECT 
    UserId,
    CASE 
        -- 判断是否存在本月登录记录
        WHEN COUNT(DISTINCT CASE WHEN DATE_FORMAT(LoginDatetime, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m') THEN 1 END) > 0
        -- 判断是否存在上个月登录记录
        AND COUNT(DISTINCT CASE WHEN DATE_FORMAT(LoginDatetime, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') THEN 1 END) > 0
        THEN 'Yes'
        ELSE 'No'
    END AS `Logged in both months`
FROM user_login
-- 可选:添加过滤条件只扫描近2个月的记录,大幅提升大表查询效率
-- WHERE LoginDatetime >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH)
GROUP BY UserId;

逻辑说明

  • 用DATE_FORMAT(LoginDatetime, '%Y-%m')提取登录时间的年月维度,避免同一年不同月/不同年同月的判断误差
  • 内层CASE语句标记对应月份的登录记录,外层COUNT统计是否存在至少1条对应月份的记录
  • 两个月份都存在登录记录时返回Yes,否则返回No
  • GROUP BY UserId自动对用户ID去重,符合去重用户列表的要求

示例验证

你提供的示例数据里的登录记录都为2021年及更早,若当前系统时间不在2021年1-2月区间内,两个用户都不满足「近两个月都登录」的条件,输出结果和你给出的预期示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:15:04