MySQL:数据库中的总用户聚合日期

时间:2016-09-04 12:13:03

标签: mysql sql

我需要计算用户总数"聚合",日复一日,例如:

表用户:

id    create_date
0     2016-09-01 00:00:00
1     2016-09-01 00:00:00
2     2016-09-01 00:00:00
3     2016-09-02 00:00:00
4     2016-09-02 00:00:00
5     2016-09-02 00:00:00
6     2016-09-03 00:00:00
7     2016-09-03 00:00:00
8     2016-09-04 00:00:00
9     2016-09-04 00:00:00

使用以下查询:

select date(u.create_date),count(u.id)
from user u
group by date(u.create_date)

返回:

date(u.create_date)    count(u.id)
2016-09-01                 3
2016-09-02                 3
2016-09-03                 2
2016-09-04                 2

但我需要返回这样汇总的数据:

date(u.create_date)    count(u.id)
2016-09-01                 3
2016-09-02                 6
2016-09-03                 8
2016-09-04                 10

THX,

注意:表格键" id"有孔,(非顺序)。

1 个答案:

答案 0 :(得分:2)

你想要一个累积总和。在MySQL中,这可能是使用变量最简单的方法:

select dte, cnt, (@c := @c + cnt) as running_cnt
from (select date(u.create_date) as dte, count(u.id) as cnt
      from user u
      group by date(u.create_date)
     ) d cross join
     (select @c := 0) params
order by dte;

注意:在对变量使用聚合时,我发现子查询是必要的。

你也可以这样做:

select d.dte,
       (select count(*)
        from users u
        where u.create_date < date_add(u.dte, interval 1 day)
       ) as running_cnt
from (select distinct date(u.create_date) as dte from user u) d;

对于少量数据,这在性能方面很好。