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 天的日期。
的方法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)
| 归档时间: |
|
| 查看次数: |
13809 次 |
| 最近记录: |