[英]How to find 1st Purchase date who made 2nd purchase within 30 days?
您可以使用窗口函数获取第一次购买,然后计算前 30 天的购买次数:
select distinct customer_id, first_purchase_date
from (select t.*,
min(purchase_date) over (partition by customer_id) as first_purchase_date
from t
) t
where purchase_date <= first_purchase_date + interval '30 day' and
purchase_date > first_purchase_date;
这使用标准 SQL 语法。 日期函数因数据库而异,因此数据库中的语法可能略有不同。
我也想查看购买次数,所以我将其写为:
select customer_id, first_purchase_date, count(*)
from (select t.*,
min(purchase_date) over (partition by customer_id) as first_purchase_date
from t
) t
where purchase_date <= first_purchase_date + interval '30 day'
group by customer_id, first_purchase_date
having count(*) > 1;
注意:这与之前的查询略有不同。 第一次只计算在不同日期的第二次购买。 这也计算可能在第一个购买日期的第二次购买。 我将两者都包括在内,因为目前还不清楚您真正想要哪个。
如果您想在没有窗口函数的情况下实现这一点,您可以使用老式聚合子查询加入您的表,该查询返回每个客户的第一次购买。 它也可以是执行相同工作的视图或 CTE。
SELECT DISTINCT customer_id, first_purchase_date
FROM Purchases AS P1 INNER JOIN
(
SELECT customer_id, min(purchase_date) AS first_purchase_date
FROM Purchases
GROUP BY customer_id
) AS P2 ON P1.customer_id = P2.customer_id
WHERE purchase_date <= first_purchase_date + 30 days;
与之前的贡献者一样,恐怕我对您正在使用的 dbms 没有经验,因此我无法帮助您使用表达式来比较 WHERE 子句中的日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.