我有一个数据表,类似于客户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'