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<代码>时间应在
组中。