我在MySQL中有一个表,用于存储每个用户的上次登录时间。 是否有任何方法可以查询在特定月份每天登录的用户? 例如。每月登录的用户列表
更新: 表非常简单,只有2个字段:
structure
-----------------------
userid last_login_time
答案 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,......