首页 > 解决方案 > 如何从 Order 表中找到两个订单之间关于后续 Customer_Ids 的日期范围?

问题描述

例如,假设我们有一个 customer_id =1,他在 2 年内下了 3 个订单,他的

第 1 个订单日期 = '2015 年 1 月 1 日'
第 2 个订单日期 = '2015 年 6 月 5 日'
第 3 个订单日期 = '2016 年 2 月 2 日'。

这必须从他第一次下订单之日起每年计算一次。

请让我知道如何在 HiveQL 中实现此场景。

标签: hiveapache-spark-sqlhiveql

解决方案


选择 ord_rnk_1.customer_id,ord_rnk_1.order_id 作为 1st_order, ord_rnk_2.order_id 作为 2nd_order, ord_rnk_1.order_date 作为 1st_order_date, ord_rnk_2.order_date 作为 2nd_order_date, CASE WHEN nullif(ord_rnk_2.order_id,0)=0 THEN '第一次购买' WHEN datediff( .order_date,ord_rnk_1.order_date) <=365 THEN 'repeat purchase' ELSE '第一次购买' end as customer_type from ( select customer_id,order_id, order_date from (select customer_id,order_id, order_date,row_number() over(partition by customer_id order by order_date asc) 排名来自 (select distinct customer_id, order_id, to_date(order_date,"dd/mm/yyyy") as order_date from table_t1 ) abc ) order_rank where order_rank.rank=1 ) ord_rnk_1 left join ( select customer_id,order_id, order_date from (select customer_id,order_id, order_date,row_number() over(partition by customer_id order by order_date asc) rank
from (select distinct customer_id, order_id, to_date(order_date,"dd/mm/yyyy") as order_date from table_t1 ) abc ) order_rank where order_rank.rank=2 ) ord_rnk_2 on ord_rnk_1.customer_id=ord_rnk_2.customer_id


推荐阅读