如何使用滞后函数获取客户移动类型的当日变化情况?

问题描述 投票:0回答:1

我有一个数据集,我试图获得客户在同一天期间离开的总次数(基本上是退款)。

如果一个客户在相同的交易时间内有一个新的业务和一个流失,那么它被认为是一个退款。我试图使用滞后函数来处理这个问题,但我只是得到任何结果,如果有变化从新业务到流失。我需要的是从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用户?

sql time lag
1个回答
1
投票

如果你要的是同一天有这两种类型的人,那么你可以使用聚合。

select user_id, time
from data
where transaction_type in ('churn', 'new_business')
group by user_id, time
having count(distinct transaction_type) = 2;

如果你想知道这些人的数量,你可以使用一个子查询。

© www.soinside.com 2019 - 2024. All rights reserved.