首页 > 解决方案 > Snowflake SQL 按最近滚动 30 天的事务过滤

问题描述

我有一个类似于具有客户 ID 和项目购买日期的数据表,如下所示。作为过滤器,我想返回客户 ID IFF 给定的客户 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

期望的输出:

Customer ID
233
111
23

最初认为使用 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

标签: sqlsnowflake-cloud-data-platform

解决方案


的方法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' 

推荐阅读