我需要你的快速帮助。我想为那些在第一次购买后30天内进行第二次购买的客户找到一个customer_id和第一个purchase_date的列表。
也就是说,馆长1,2,3在30天内进行了第二次购买。
我需要curstomer_id的1,2,3和他们各自的第一个purchase_date。
我有100多万名顾客身份证。
如果我们可以在Python或SQL中实现这一点,那就太好了。非常感谢:)
发布于 2020-02-29 05:14:22
您可以使用窗口函数获得第一次购买,然后计算前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;
注意:这与前面的查询略有不同。前者只计算另一天的第二次购买。这也包括第一次购买日期的第二次购买。我把两者都包括在内,因为现在还不清楚你到底想要哪一个。
发布于 2020-02-29 12:15:46
如果您想在没有窗口功能的情况下实现这一点,您只需使用一个老式的聚合子查询连接您的表,该子查询将返回每个客户的第一次购买。它也可以是一个视图,也可以是一个执行相同工作的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子句中的日期。
https://stackoverflow.com/questions/60465504
复制