使用SQL查找事件是否在每条记录后的N天内发生



我试图找出一种方法,在SQL中查找一个事件是否在N天内发生了不同的事件

例如,如果我的数据如下:

User_ID Code    Date
1122    A   01-01-2020
1122    A   02-01-2020
1122    A   02-01-2020
2233    A   04-01-2020
2233    A   04-01-2020
1122    B   04-01-2020
3344    A   07-01-2020
3344    B   07-01-2020
2233    A   08-01-2020

假设N=2,这意味着我需要找出事件B是否在2天内发生,每个用户的事件A,如果是这样,我需要过滤掉事件A

因此,在我的数据中,在第1天有一个事件A,在第2天有两个用户1122的事件A,然后在第4天有事件B。事件B发生在用户1122的第一个事件A之后3天,以及用户1122在两个事件A后2天。所以这两个A事件应该被标记:(对于与A在同一天发生事件B的用户3344也是如此,因此也符合2天(

User_ID   Code    Date    B_within_2_days
1122    A   01-01-2020  NO
1122    A   02-01-2020  YES
1122    A   02-01-2020  YES
2233    A   04-01-2020  NO
2233    A   04-01-2020  NO
1122    B   04-01-2020  NO
3344    A   07-01-2020  YES
3344    B   07-01-2020  NO
2233    A   08-01-2020  NO

因此,通常有两种方法。您可以创建一个标量函数(或UDF(,该函数接受所需的参数,以针对同一个表运行查询,查找相关的事件B,然后它只返回true或false。这将不是一场精彩的演出。

或者,您可以使用一个存储过程,并使用光标遍历它们,组装要返回的最终结果集。

select User_ID, Code, "Date",
case when Code = 'A' and exists (
select 1 from T where Code = 'B'
and "Date" between t1."Date" and date_add(t1."Date", 2)
) T then 'YES' else 'NO' end as B_within_2_days
from T t1

最新更新