Mysql 基于动态日期的不同用户计数

Mysql 基于动态日期的不同用户计数,mysql,sql,Mysql,Sql,我有一个表,记录用户每次登录我的应用程序的日期 该表如下所示: 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 201

我有一个表,记录用户每次登录我的应用程序的日期

该表如下所示:

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
数据如下所示:

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
我想找到每天新用户的数量,同时跟踪老用户,因此我想要的结果如下所示:

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年9月1日,我需要在这一天数数 在2013-09-02,我需要在2013-09-01和2013-09-02之间进行不同的计数 2013年9月3日,我需要在2013年9月1日和2013年9月3日之间进行不同的计数

我想到了下面这样的东西,但它永远不会回来(需要很多时间)

我正在使用Mysql服务器,有任何帮助吗

Select 
* 
from 
myTable
GROUP BY
DATE(logintime), userId

这可能会奏效:

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

Fiddle.

从日期开始计算用户数时,似乎您的意思是
2
而不是
4
2013-09-03
不,我的意思是4,这是我的问题,我需要每天递归计算,例如:2013-09-02,我需要在2013-09-01和2013-09-02之间进行不同的计算。2013年9月3日,我需要在2013年9月1日和2013年9月3日之间进行不同的计数。哦,好的。因此,从最早日期到当前登录日期的唯一值。我已经添加了一个可能的解决方案,这是行不通的,因为它得到了每天不同的用户,而没有考虑到前一天的用户。我不明白为什么这个查询有效。你能详细说明一下吗?@alyrafea实际上我是在对日期进行分组,我从datetime列中提取出来,我需要每天递归计数,例如:在2013-09-02,我需要在2013-09-01和2013-09-02之间进行不同的计数。在2013-09-03,我需要计算2013-09-01和2013-09-03之间的差异。感谢建议的解决方案,我想我们已经做到了,但不幸的是,此查询需要永远运行,以及如何使其更快的建议?