Snowflake SQL 按最近滚动 30 天内的事务进行过滤

Bla*_*ite 11 sql snowflake-cloud-data-platform

我有一个类似于客户 ID 和商品购买日期的数据表,如下所示。作为过滤器,我希望返回客户 ID,前提是给定的客户 ID 在过去 30 个滚动天内至少进行了 1 次购买。

这是可以用一个简单的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
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Customer ID
233
111
23
Run Code Online (Sandbox Code Playgroud)

最初考虑使用 CTE 来初步过滤掉过去 30 天内没有至少购买过 1 件商品的所有用户。尝试了以下两个不同的 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
Run Code Online (Sandbox Code Playgroud)

Sim*_*onD 17

要获取过去 30 天内至少进行过一次购买的客户,您可以执行以下操作:

select distinct
    customer_id
from sample_table
where item_date_purchased > dateadd(day, -30, current_date());
Run Code Online (Sandbox Code Playgroud)

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


Luk*_*zda 7

的方法INTERVAL几乎是正确的。

SELECT * 
FROM data d 
WHERE d.DATE_CREATED <= current_date + interval '30 days'  
                        -- this date is from the future instead of the past
Run Code Online (Sandbox Code Playgroud)

=>

SELECT * 
FROM data d 
WHERE d.DATE_CREATED >= current_date - interval '30 days' 
Run Code Online (Sandbox Code Playgroud)