1

翌月のレコードを繰り返さずに、その月にログインしたユーザーの数を返したいというクエリがあります。

ユーザーが4月と5月にログインした場合、4月のレコードは1つだけ表示されます。これは私がこれまでに持っているものです。

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 に答える