计算新用户订阅量MySQL

计算新用户订阅量MySQL,mysql,sql,partition,Mysql,Sql,Partition,我有一个数据集,我需要找到新的订户收入 这些订阅者根据其订阅情况每周或每月付费 唯一标识符是“customer”,数据是时间戳级别的,但我希望它在每月级别汇总 现在每个月,我们只需要了解新用户的收入。 基本上,假设客户每月/每周订阅,我们只希望他们的第一笔付款在此计算 这是一个示例数据集和 created customer amount 16-Feb-18 14:03:55 cus_BwcisIF1YR1UlD 33300 16-Feb

我有一个数据集,我需要找到新的订户收入

这些订阅者根据其订阅情况每周或每月付费

唯一标识符是“customer”,数据是时间戳级别的,但我希望它在每月级别汇总

现在每个月,我们只需要了解新用户的收入。 基本上,假设客户每月/每周订阅,我们只希望他们的第一笔付款在此计算

这是一个示例数据集和

created            customer                  amount
16-Feb-18 14:03:55  cus_BwcisIF1YR1UlD  33300
16-Feb-18 14:28:13  cus_BpLsCvjuubYZAe  156250
15-Feb-18 19:19:14  cus_C3vT6uVBqJC1wz  50000
14-Feb-18 23:00:24  cus_BME5vNeXAeZSN2  162375
9-Feb-18 14:27:26   cus_BpLsCvjuubYZAe  156250
……等等

这是最终的期望输出

yearmonth new_amount
Jan - 2018   100000
Feb - 2018   2000
Dec - 2017   100002

这需要在MySQL接口中完成

基本上,您希望将数据过滤到第一个客户。其中一种方法涉及相关子查询

其余的只是按年按月累加。因此,总体而言,查询没有那么复杂,但它确实由两个不同的部分组成:

select year(created) as yyyy, month(created) as mm,
       count(*) as num_news,
       sum(amount) as amount_news
from t
where t.created = (select min(t2.created)
                   from t t2
                   where t2.customer = t.customer
                  )
group by yyyy, mm

基本上,您希望将数据过滤到第一个客户。其中一种方法涉及相关子查询

其余的只是按年按月累加。因此,总体而言,查询没有那么复杂,但它确实由两个不同的部分组成:

select year(created) as yyyy, month(created) as mm,
       count(*) as num_news,
       sum(amount) as amount_news
from t
where t.created = (select min(t2.created)
                   from t t2
                   where t2.customer = t.customer
                  )
group by yyyy, mm

这太棒了,谢谢!但问题是,它每个月只选择最短的创建日期,所以很多客户被排除在外。我想为每个客户选择最短的创建日期-考虑到这两个变量,有什么办法吗?@PravinSingh。我不知道您正在运行什么查询,但此查询正在选择每个客户的最小创建日期。非常感谢!但问题是,它每个月只选择最短的创建日期,所以很多客户被排除在外。我想为每个客户选择最短的创建日期-考虑到这两个变量,有什么办法吗?@PravinSingh。我不知道您正在运行什么查询,但此查询正在选择每个客户的最小创建日期。非常感谢!但问题是,它每个月只选择最短的创建日期,所以很多客户被排除在外。我想为每个客户选择最短的创建日期-考虑到这两个变量,有没有关于如何做到这一点的想法?非常感谢!但问题是,它每个月只选择最短的创建日期,所以很多客户被排除在外。我想为每个客户选择最短的创建日期-考虑到这两个变量,有没有关于如何做到这一点的想法?