0

我有一张列出订阅事件的表格。当表格中添加了“NEW”事件时,这意味着新客户的新订阅或现有客户的每月订阅续订。我希望能够按月汇总数据并根据是新客户还是续订来拆分数据。

我正在寻找一个公式,上面写着“如果 user_ID 未知且事件为“新”,则计入+1“新客户”列,否则计入+1“续订”列

源表

用户身份 事件 日期
2 新的 26/9/2021
2 新的 26/8/2021
1 新的 2021 年 8 月 15 日

期望的输出

Sept 20: 1 renewal; 0 new subscriptions
Aug 20: 2 new subscriptions
4

2 回答 2

0

您可以使用ROW_NUMBER()来确定一行是否是每个客户端的第一行。

例如,您可以这样做:

select
  year(date) as y,
  month(date) as m,
  sum(case when rn = 1 then 1 else 0 end) as new_subscriptions,
  sum(case when rn <> 1 then 1 else 0 end) as renewals
from (
  select *, row_number() over(partition by user_id order by date) as rn 
  from t 
  where event = 'NEW'
) x
group by y, m
order by y, m

结果:

 y     m  new_subscriptions  renewals 
 ----- -- ------------------ -------- 
 2021  8  2                  0        
 2021  9  0                  1        

请参阅DB Fiddle上的运行示例。

于 2021-09-27T01:02:48.270 回答
0

您可以使用窗口函数MIN来确定每个用户的最早订阅日期并进行比较以确定他们是否是新用户。然后,您可以对此进行汇总/求和,以确定每年和每月的新订阅或续订数量。

SELECT
    YEAR(`Date`) as `year`,
    MONTH(`Date`) as `month`,
    SUM(is_new=true) as `new subscriptions`,
    SUM(is_new=false) as `renewals`
FROM (
    SELECT
        *,
        `Date`=MIN(`Date`) OVER (PARTITION BY `User_id`) as is_new 
    FROM
        events
    WHERE 
        `Event`='NEW'
) e
GROUP BY
   YEAR(`Date`),
   MONTH(`Date`)
ORDER BY
   YEAR(`Date`),
   MONTH(`Date`);
新订阅 续约
2021 8 2 0
2021 9 0 1

或者,如果您使用不支持窗口函数的 mysql 版本,您可以对找到最早订阅日期的子查询执行左连接。使用相同的逻辑,我们可以确定和计算新订阅和续订的数量。

SELECT
    YEAR(`Date`) as `year`,
    MONTH(`Date`) as `month`,
    SUM(new_sub.min_date IS NOT NULL) as `new subscriptions`,
    SUM(new_sub.min_date IS NULL) as `renewals`
FROM 
    events e
LEFT JOIN (
    SELECT
        `User_id`,
        MIN(`Date`) as min_date
    FROM
        events
    WHERE 
        `Event`='NEW'
    GROUP BY
        `User_id`
) as new_sub ON e.`User_id`=new_sub.`User_id` AND
                e.`Date`=new_sub.min_date
GROUP BY
   YEAR(`Date`),
   MONTH(`Date`)
ORDER BY
   YEAR(`Date`),
   MONTH(`Date`)
新订阅 续约
2021 8 2 0
2021 9 0 1

在 DB Fiddle 上查看工作演示

让我知道这是否适合您。

于 2021-09-26T22:23:46.307 回答