我有一个查询,其中我想返回已登录的用户数,而不会在下个月重复记录。
如果用户已登录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
我希望这是有道理的。如果您想进一步澄清,请问我任何问题。非常感谢!
答案 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
)