如何编写SQL语句查询重复日期及登录人数最多的日期?
查询重复日期及登录用户最多日期的SQL方案
一、查询存在重复登录记录的日期
假设你的登录记录表名为user_logins,包含user_id(用户ID)和login_date(登录日期,格式为DATE或DATETIME),以下分两种场景给出SQL:
1. 查询有多个不同用户登录的日期
如果要找出当天有超过1个独立用户登录的日期,使用:
SELECT login_date, COUNT(DISTINCT user_id) AS user_count FROM user_logins GROUP BY login_date HAVING user_count > 1 ORDER BY user_count DESC;
2. 查询存在用户重复登录的日期(同一用户当天多次登录)
如果要找出有用户在当天登录超过1次的日期,使用:
SELECT login_date FROM ( SELECT login_date, user_id, COUNT(*) AS login_times FROM user_logins GROUP BY login_date, user_id HAVING login_times > 1 ) AS duplicate_logins GROUP BY login_date;
二、找出登录用户人数最多的日期
统计每天的独立登录用户数,并返回人数最多的日期(若多个日期人数相同,会全部返回):
SELECT login_date, COUNT(DISTINCT user_id) AS max_user_count FROM user_logins GROUP BY login_date HAVING COUNT(DISTINCT user_id) = ( SELECT MAX(user_count) FROM ( SELECT COUNT(DISTINCT user_id) AS user_count FROM user_logins GROUP BY login_date ) AS daily_counts );
补充说明
- 若
login_date是DATETIME类型,需先转换为纯日期格式:MySQL用DATE(login_date),SQL Server/PostgreSQL用CAST(login_date AS DATE)替换语句中的login_date。 - 若不需要统计独立用户,而是统计所有登录记录数(含同一用户多次登录),去掉
COUNT中的DISTINCT即可。
内容的提问来源于stack exchange,提问作者peter parker
相关产品推荐
相关产品推荐

