查找 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 天以内。
我有这样一种情况,每次客户访问时,我都会在 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 天以内。