以下是用户表
---------------------------------------
| 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
但它产生了过去12个月的数据,因为之前没有数据。但我希望它从那个月的实际累积计数开始。我怎样才能做到这一点?谢谢。
更新
期望的输出
-----------------------
| 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 |
-----------------------
答案 0 :(得分:0)
在sql语句结尾处将@cnt变量初始化为0:
(SELECT @cnt := 0) users_alias
您需要更改此项以将计数器初始化为之前注册的用户数:
(SELECT @cnt := count(*) from users
where regdate<CURDATE() - INTERVAL 1 YEAR) users_alias