繁体   English   中英

如何查找在 30 天内进行第二次购买的第一次购买日期?

[英]How to find 1st Purchase date who made 2nd purchase within 30 days?

我需要你的快速帮助。 我想为在第一次购买后 30 天内进行第二次购买的客户找到 customer_id 和第一次购买日期的列表。

即 curstomer_id 的 1,2,3 已在 30 天内进行了第二次购买。

我需要curstomer_id 的1,2,3 和他们各自的第一个purchase_date。

我有超过 10 万个 customer_id。

在此处输入图片说明

如果我们可以在 Python 或 SQL 中实现,那就太好了。 非常感谢:)

您可以使用窗口函数获取第一次购买,然后计算前 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM