我在 MySQL 中有一个表,用于存储每个用户的上次登录时间。有什么方法可以查询出某个月份每天登录的用户吗?例如。一月份每天登录的用户列表
更新:表确实非常简单,只有 2 个字段:
structure
-----------------------
userid last_login_time
我在 MySQL 中有一个表,用于存储每个用户的上次登录时间。有什么方法可以查询出某个月份每天登录的用户吗?例如。一月份每天登录的用户列表
更新:表确实非常简单,只有 2 个字段:
structure
-----------------------
userid last_login_time
iflast_login_time
实际上不仅仅是最后一次登录时间,而是所有登录时间:
SELECT userID
FROM table
WHERE MONTH(last_login_time) = 2 AND YEAR(last_login_time) = 2013
GROUP BY userID
HAVING COUNT(DISTINCT DAY(last_login_time)) = DAY(LAST_DAY(MAX(last_login_time)))
我相信下面允许使用索引,因此可能更有效:(如果索引)
SELECT userID
FROM table
WHERE last_login_time LIKE '2013-02%'
GROUP BY userID
HAVING COUNT(DISTINCT DAY(last_login_time)) = DAY(LAST_DAY(MAX(last_login_time)))
如果last_login_time
只是最后一次登录时间:
将另一列添加到表中,该列将作为计数器来记录本月登录的天数,每次用户在新的一天登录时更新它。新月份开始时重置此计数器。
获取用户:
SELECT userID
FROM table
WHERE last_login_time LIKE '2013-02%'
AND counter = DAY(last_login_time)
使用MySQL MONTH
子句。
SELECT * FROM user_logins ORDER BY MONTH(last_login_time) DESC LIMIT 1;
以上查询将返回最新记录。
现在,如果最新记录当前是登录日期,那么您可以使用LIMIT 1,1
in LIMIT
,
使用以下查询来获得您需要的结果
select * from logindetails lg
group by userid having month(lg.` last_login_time`)=2 and year(lg.` last_login_time`)=2013 and
(count(distinct(day(lg.` last_login_time`)))) =day(last_day(lg.` last_login_time`))
在上面的查询中,2 代表 2 月。如果你想三月使用 3,四月使用 4,......