在销售订阅计数期间计算续订

时间:2014-12-02 15:51:20

标签: php mysql

我写了一张表,其中写了我杂志的每个订阅,如下:

USERID | DATE | 

31 | 2011-09-22 | 
54 | 2011-09-22 | 
59 | 2011-09-23 | 
11 | 2011-10-02 | 
88 | 2011-10-05 |
31 | 2011-10-06 | 
17 | 2011-10-12 | 
54 | 2011-10-15 |
31 | 2011-11-05 |
54 | 2011-11-12 |

现在,出于统计目的,我需要有一个结果,我看到,每个月,我已售出多少订阅以及已经购买了多少用户。

例如,如果我们查看顶部的数据,我应该得到一个结果:

DATE | SOLD | RENEWAL 
 09  | 3    | 0
 10  | 5    | 1
 11  | 2    | 2

我可以对每月销售的订阅进行分组,但我无法添加"续订"资讯

  SELECT COUNT( * ) AS  sold, MONTH(date) FROM table_sold WHERE date >= CURDATE() - INTERVAL 13 MONTH GROUP BY YEAR( date ) , MONTH( date ) ORDER BY date ASC LIMIT 1,15

通过这种方式我只有这样的结果:

 DATE | SOLD
  09  | 3    
  10  | 5
  11  | 2

我尝试了几个选项,子查询,联合等等,但没有成功。 需要考虑的是,该表有70.000个条目,带有硬扫描的查询可能是个问题。

在您看来,有没有办法在mysql中或我已经采取这个想法在php中制作它?

1 个答案:

答案 0 :(得分:1)

这是一个想法。查看每个用户的第一个日期。然后计算不是第一个日期的每个月的续订:

select year(date), month(date), count(*) as sold,
       sum(case when date <> firstdate then 1 else 0 end) as renewals
from subscriptions s join
     (select userid, min(date) as firstdate
      from subscriptions s
      group by userid
     ) su
     on s.userid = su.userid
group by year(date), month(date)
order by year(date), month(date);