Snowflake SQL按最近30天内的事务进行筛选



我有一个数据表,类似于客户ID和物品购买日期,如下所示。作为过滤器,我想返回客户ID IFF给定的客户ID在过去30天内至少有一次购买。

这是可以用一个简单的WHERE子句完成的吗?出于我的目的,这个数据表有许多记录,其中客户ID可能有数百笔交易

Customer ID Item Date Purchased
233         2021-05-27
111         2021-05-27
111         2021-05-21
23          2021-05-12
412         2021-03-11 
111         2021-03-03

期望输出:

Customer ID
233
111
23

最初被认为使用CTE来初步筛选出在过去30天内没有购买过至少一件商品的用户。尝试了以下两个不同的where语句,但都无法返回错误的日期时间框架。

SELECT * 
FROM data d 
WHERE 30 <= datediff(days, d.ITEM_PURCHASE_DATE, current_date) X
WHERE t.DATE_CREATED <= current_date + interval '30 days' X

要获得在过去30天内至少购买过一次的客户,您可以这样做:

select distinct
customer_id
from sample_table
where item_date_purchased > dateadd(day, -30, current_date());

上面显示的dateadd函数返回当前日期前30天的日期。

使用INTERVAL的方法几乎是正确的。

SELECT * 
FROM data d 
WHERE d.DATE_CREATED <= current_date + interval '30 days'  
-- this date is from the future instead of the past

=>

SELECT * 
FROM data d 
WHERE d.DATE_CREATED >= current_date - interval '30 days' 

相关内容

  • 没有找到相关文章