【问题标题】:Cumulative sum on time interval时间间隔累计
【发布时间】:2015-10-04 20:54:01
【问题描述】:

下面是用户表

---------------------------------------
|   uid   |            reg_date        |
---------------------------------------
| 1       |      2011-07-20 02:24:36   |
---------------------------------------
| 2       |      2012-10-03 07:37:43   |
---------------------------------------
|   ...   |      ... ... ... ... ...   |
---------------------------------------
| 300000  |      2015-12-19 04:13:51   |
---------------------------------------

我想从此表中按月从 curdate() 数据中获取最近 1 年。

我已尝试以下查询。

SELECT month, 
       @cnt := @cnt + total cum_sum
  FROM (
        SELECT MONTH(reg_date) month,
               COUNT(*) total
               FROM users
               WHERE reg_date >= CURDATE() - INTERVAL 1 YEAR
               GROUP BY YEAR(reg_date), MONTH(reg_date)
       ) n, (SELECT @cnt := 0) users_alias

但它会生成最近十二个月的数据,因为在此之前没有数据。但我希望它从当月的实际累积计数开始。我怎样才能做到这一点?谢谢。

更新

想要的输出

-----------------------
|  month  |   cum_sum |
-----------------------
| 10      |      1000 |
-----------------------
| 11      |      1500 |
-----------------------
| 12      |      2550 |
-----------------------
| 1       |      9700 |
-----------------------
| 2       |     11000 |
-----------------------
| 3       |     14000 |
-----------------------
| 4       |     15700 |
-----------------------
| 5       |     20000 |
-----------------------
| 6       |     22000 |
-----------------------
| 7       |     27000 |
-----------------------
| 8       |     31000 |
-----------------------
| 9       |     35000 |
-----------------------
| 10      |     41000 |
-----------------------

【问题讨论】:

  • 您能否展示您的表架构并举例说明您想要的输出?

标签: mysql


【解决方案1】:

你在sql语句的最后将@cnt变量初始化为0:

(SELECT @cnt := 0) users_alias

您需要更改此项以将计数器初始化为之前注册的用户数:

(SELECT @cnt := count(*) from users
 where regdate<CURDATE() - INTERVAL 1 YEAR) users_alias

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    相关资源
    最近更新 更多