繁体   English   中英

如何根据事件(而不是日期)计算 SQL 中的客户保留率?

[英]How to calculate customer retention in SQL based on events (not dates)?

我正在尝试创建一个 SQL 语句来找出哪些客户没有参加最后三个活动。

表 1 - 客户:

客户 ID、客户名称

表 2 - 事件

事件 ID、事件日期、事件名称

表 3 - 事件活动

事件 ID、客户 ID

现在我试图找到那些没有连续参加 3 次活动的客户。

任何帮助表示赞赏。

嗯,一种方法是生成所有(最后三个)事件和客户的列表,然后过滤没有它们的客户:

select c.customer_id
from customer c cross join
     (select e.*
      from events e
      order by event_date desc
      fetch first 3 rows only
     ) e left join
     event_activity ea
     on ea.customer_id = c.customer_id and ea.event_id = e.event_id
group by c.customer_id
having count(ea.event_id) < 3;

另一种方法是过滤掉不具备所有三个条件的客户:

select c.*
from customers c
where (select count(*)
        from event_activity ea join
             (select e.*
              from events e
              order by event_date desc
              fetch first 3 rows only
             ) e
             on e.event_id = ea.event_id
        where ea.customer_id = e.customer_id
       ) < 3;

如果您正在寻找没有参加最近 3 个活动的客户(假设这就是您所说的“最近三个活动”的意思)

select customer_id, customer_name
   from customers 
   where customer_id in  
      (select customer_id
       from event_activity 
       where event_id in
          (select event_id 
          from events_table
          where rownum <= 3
          order by event_date desc))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM