【问题标题】:Snowflake SQL Filter by transactions in the last rolling 30 daysSnowflake SQL 按最近滚动 30 天的事务筛选
【发布时间】:2021-06-25 08:51:46
【问题描述】:

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

这可以通过简单的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

【问题讨论】:

  • 当您说过去 30 天滚动时,您只是指当前日期前 30 天发生的交易(并且当前日期每天移动)。如果是这样,您为什么希望在结果中看到 customer_id 23?由于您在 2021-06-25(您的示例中的当前日期)发布此内容

标签: sql snowflake-cloud-data-platform


【解决方案1】:

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' 

【讨论】:

    【解决方案2】:

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

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

    上面显示的 dateadd 函数返回当前日期前 30 天的日期(SQL 运行时)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2017-07-18
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      相关资源
      最近更新 更多