此表代表用户订阅:
CREATE TABLE `subscriptions` (
`id` int(11) NOT NULL,
`email` varchar(255) DEFAULT NOT NULL,
`created_at` datetime NOT NULL
);
同一封电子邮件可以有多个记录。
如何获取每月的新订阅数和每月的续订数?
假设在2018年7月通过电子邮件“ aaa@a.com”进行了订阅。如果在2018年8月通过“ aaa@a.com”进行了另一项订阅,则是续订。在2018年8月没有在2018年7月注册电子邮件的所有订阅都是新订阅。
答案 0 :(得分:1)
您可以通过确定第一次看到订阅者来做到这一点:
select year(created_at), month(created_at),
count(*) as num_subscribers,
sum( min_ca = created_at ) as num_new_subscribers,
sum( min_ca > created_at ) as num_renewals
from subscriptions s join
(select email, min(created_at) as min_ca
from subscriptions s
group by email
) ss
on s.email = ss.email
group by year(created_at), month(created_at);
答案 1 :(得分:0)
通过仅计算续订次数并从订阅总数中减去,您还可以获得新的订阅:
select t.cyear, t.cmonth, (t.total - t.renewals) newsubs, t.renewals
from (
select
year(s.created_at) cyear, month(s.created_at) cmonth,
count(*) total,
sum(
case when exists (
select 1 from subscriptions
where
email = s.email and
last_day(s.created_at - interval 1 month) = last_day(created_at))
then 1
else 0
end
) renewals
from subscriptions s
group by year(s.created_at), month(s.created_at)
) t