查找 30 天内的所有匹配行 window

Finding all matching rows in a 30 day time window

我有这样一种情况,每次客户访问时,我都会在 table 中排成一行。我想要做的是找到那些在任何给定 30 天内访问过的客户 window 和 select 这些访问。

EX:主要焦点将放在 Table 中的三行:ROW_ID、CUSTOMER_ID、VISIT_DATE(日期格式)。

我想要了解的是客户在 30 天内多次访问的情况。 EX:CUSTOMER_ID 2019 年 10 月 8 日和 2019 年 11 月 1 日再次访问#5,我希望看到这两行

我们可以尝试使用现有逻辑来处理需求:

SELECT ROW_ID, CUSTOMER_ID, VISIT_DATE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.CUSTOMER_ID = t2.CUSTOMER_ID AND
                    t2.ROW_ID <> t1.ROW_ID AND
                    ABS(t2.VISIT_DATE - t1.VISIT_DATE) <= 30);

上述查询背后的逻辑清晰地读作 return 任何客户记录,其中有同一客户的另一条记录,使得两条(不同的)记录彼此相隔 30 天以内。