1

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

如果用户在 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 月和 2 月出现。我希望它省略那条记录。要么,要么积累。像这样:

任何一个

userid    month
1        1
2        1
3        2

或者

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

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

4

2 回答 2

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
于 2013-02-06T14:41:31.583 回答
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
)
于 2013-02-06T14:56:43.170 回答