如何使用lag函数获取客户移动类型的当天变化

3zwjbxry  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(377)

我有一个数据集,我试图得到总次数的客户已离开在同一天期间(基本上是退款)。
如果一个客户有一个新的业务和相同的交易时间流失,那么它被认为是退款。我试着用滞后函数来解决这个问题,但是如果从新业务转变为客户流失,我只会得到任何结果。我需要的是从新业务的变化,以及在同一天发生的搅动。
数据如下:

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

在上面的示例中,用户标识1234将是退款,但5678将不是。用户1011仍然是客户。我想知道退款客户的总数
我的问题: select count(*) lag(time) over (partition by user_id order by time) from data where transaction_type in('churn','new_business') 然而,这个查询所发生的事情是,我得到的所有时间都有一个变化与他们两个。所以我得到了用户号1234和5678。为了将此限制为仅用户id 1234,我缺少了什么?

rseugnpd

rseugnpd1#

如果希望两种类型的人在同一日期,则可以使用聚合:

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

如果要计算这些值,可以使用子查询。

相关问题