我写了一张表,其中写了我杂志的每个订阅,如下:
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中制作它?
答案 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);