我有一个数据集,我试图获得客户在同一天期间离开的总次数(基本上是退款)。
如果一个客户在相同的交易时间内有一个新的业务和一个流失,那么它被认为是一个退款。我试图使用滞后函数来处理这个问题,但我只是得到任何结果,如果有变化从新业务到流失。我需要的是从new_business到churn的变化,以及发生在同一天期间。
数据是这样的。
user_id time transaction_type
1234 2020-01-10 new_business
1234 2020-01-10 churn
5678 2020-01-10 new_business
5678. 2020-05-01 churn
1011 2020-01-10 new_business
在上面的例子中,用户ID1234是退款,但5678不是。 用户1011仍然是客户。我试图得到退款客户的总计数。
我的查询。
select count(*)
lag(time) over (partition by user_id order by time)
from data
where transaction_type in('churn','new_business')
但是这个查询的结果是 我得到的所有时间都有变化,他们两个都有变化 所以我得到的是user_id 1234和5678。我缺少了什么才能将其限制在1234用户?
如果你要的是同一天有这两种类型的人,那么你可以使用聚合。
select user_id, time
from data
where transaction_type in ('churn', 'new_business')
group by user_id, time
having count(distinct transaction_type) = 2;
如果你想知道这些人的数量,你可以使用一个子查询。