MySQL查询在特定月份每天登录的用户

时间:2013-02-26 10:18:42

标签: mysql

我在MySQL中有一个表,用于存储每个用户的上次登录时间。 是否有任何方法可以查询在特定月份每天登录的用户? 例如。每月登录的用户列表

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

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

3 个答案:

答案 0 :(得分:0)

如果last_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)

答案 1 :(得分:0)

使用MySQL MONTH子句。

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

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

现在,如果当前记录了最新记录,那么您可以在LIMIT 1,1中使用LIMIT

答案 2 :(得分: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月使用3,4月使用4,......