非重复的每月SQL

时间:2013-02-06 14:38:22

标签: mysql sql

我有一个查询,其中我想返回已登录的用户数,而不会在下个月重复记录。

如果用户已登录4月和5月,则仅显示4月份的一条记录。这是我到目前为止所做的。

SELECT DISTINCT (a.userid), EXTRACT(MONTH FROM a.loginTime) as month 
FROM login_audit a LEFT JOIN user u on u.userid = a.userid 
WHERE a.loginTime <= '2012-12-31 11:59:59' 
AND a.loginTime >= '2012-01-01 00:00:00' 
GROUP BY month 

到目前为止,记录正在返回

userid    month
1        1
2        1
1        2
3        2

在这种情况下,用户1即将进入1月和Februray。我想要省略那条记录。无论是那个还是积累了。像这样:

无论

userid    month
1        1
2        1
3        2

或者

userid    month
1        1
2        1
1        2
2        2
3        2

我希望这是有道理的。如果您想进一步澄清,请问我任何问题。非常感谢!

2 个答案:

答案 0 :(得分:5)

看不到你需要表用户...

对于第一个“想要的场景”:

SELECT 
  a.userid, 
  MIN(EXTRACT(MONTH FROM a.loginTime)) as month 
FROM login_audit a
WHERE a.loginTime <= '2012-12-31 11:59:59' AND a.loginTime >= '2012-01-01 00:00:00'
GROUP BY a.userid

答案 1 :(得分:1)

我会用这种方法。

SELECT DISTINCT (a.userid), EXTRACT(MONTH FROM a.loginTime) as month 
FROM login_audit a 
WHERE a.loginTime <= '2012-12-31 11:59:59' 
AND a.loginTime >= '2012-01-01 00:00:00' 

and not exists
(select userid
from login_audit
where login_audit.user_id = a.user_id
and carry on with date range for the following month
)