1

我在 MySQL 中有一个表,用于存储每个用户的上次登录时间。有什么方法可以查询出某个月份每天登录的用户吗?例如。一月份每天登录的用户列表

更新:表确实非常简单,只有 2 个字段:

  structure 
  -----------------------
  userid   last_login_time
4

3 回答 3

0

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)
于 2013-02-26T10:25:45.840 回答
0

使用MySQL MONTH子句。

SELECT * FROM user_logins ORDER BY MONTH(last_login_time) DESC LIMIT 1;

以上查询将返回最新记录。

现在,如果最新记录当前是登录日期,那么您可以使用LIMIT 1,1in LIMIT,

于 2013-02-26T10:36:23.867 回答
0

使用以下查询来获得您需要的结果

  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,......

于 2013-02-26T10:50:20.420 回答