0

ユーザーがアプリケーションにログインするたびに日付を記録するテーブルがあります。

テーブルは次のようになります。

Userid: int
logintime: timestamp

データは次のようになります。

Userid   logindate
2        2013-09-01
2        2013-09-02
3        2013-09-02
4        2013-09-02
4        2013-09-03
5        2013-09-03

古いユーザーを追跡しながら、毎日新しいユーザーの数を見つけたいので、必要な結果は次のようになります。

logindate   count of users
2013-09-01  1
2013-09-02  3 
2013-09-03  4

2013-09-01 では、この日に個別にカウントする必要があります 2013-09-02 には、2013-09-01 と 2013-09-02 の間で個別にカウントする必要があります 2013-09-03 では、2013 の間で個別にカウントする必要があります-09-01 および 2013-09-03

以下のようなことを考えましたが、返されません(時間がかかります)

select date(ul.logintime) d, 
(select count(distinct ul2.userid) from userlogin ul2 where 
date(ul2.logintime) between ADDDATE(LAST_DAY(SUBDATE(curdate(), INTERVAL 1 MONTH)), 1) 
and date(ul.logintime)) dis from userlogin ul where month(logintime) = 9;

私はMysqlサーバーを使用しています。

4

3 に答える 3

0

おそらくこれはうまくいくかもしれません:

SELECT
  date(greatest(t1.logindate, t2.logindate)) ld,
  count(DISTINCT t2.userid) amount
FROM t t1
JOIN t t2 ON t1.logindate >= t2.logindate
GROUP BY ld
ORDER BY ld

ここでフィドル。

于 2013-10-16T16:29:15.030 に答える
0
SELECT COUNT (distinct Userid),logindate
FROM Userlogin
Group by Logindate
于 2013-10-16T16:35:10.570 に答える
0

これを試して:

Select 
* 
from 
myTable
GROUP BY
DATE(logintime), userId
于 2013-10-16T16:27:51.157 に答える