Sql 如何使用滞后函数获取客户移动类型的当天变化
我有一个数据集,我试图获得客户在同一天内离开的总次数(基本上是退款) 如果一个客户有一个新的业务和一个具有相同交易时间的客户流失,那么它将被视为退款。我试图使用滞后函数来实现这一点,但如果从新业务转变为客户流失,我只会得到任何结果。我需要的是从新业务转变为客户流失,以及在同一天内发生 数据如下所示:Sql 如何使用滞后函数获取客户移动类型的当天变化,sql,time,lag,Sql,Time,Lag,我有一个数据集,我试图获得客户在同一天内离开的总次数(基本上是退款) 如果一个客户有一个新的业务和一个具有相同交易时间的客户流失,那么它将被视为退款。我试图使用滞后函数来实现这一点,但如果从新业务转变为客户流失,我只会得到任何结果。我需要的是从新业务转变为客户流失,以及在同一天内发生 数据如下所示: user_id time transaction_type 1234 2020-01-10 new_business 1234
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
在上面的示例中,用户id 1234可以退款,但5678不能退款。用户1011仍然是客户。我正在尝试获取退款客户的总数
我的问题是:
选择计数(*)
滞后(时间)超过(按用户划分\u id按时间排序)
从数据
在此处输入交易(“客户流失”、“新业务”)
然而,这个查询所发生的事情是,我得到的所有时间都有变化,他们两个。所以我得到了用户id 1234和5678。为了将此限制为仅限用户id 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;
如果您想计算这些数据,可以使用子查询。您想要什么结果?这只会得到同时拥有这两个数据的用户,而不考虑是否在同一天发生。@user3120266<代码>时间应在
组中。