问题描述
具有3列的表格:订单ID,会员ID,订单日期
需要按会员编号将按天数b / w细分的订单分布拉低2个连续订单
我有什么?
SELECT
a1.member_id,count(distinct a1.order_id) as num_orders,a1.order_date,DATEDIFF(DAY,a2.order_date) as days_since_last_order
from orders as a1
inner join orders as a2
on a2.member_id = a1.member_id+1;
这并不能完全帮助我,因为我需要的输出是:
解决方法
您可以使用lag()
来获取同一位客户的上一个订单的日期:
select o.*,datediff(
order_date,lag(order_date) over(partition by member_id order by order_date,order_id)
) days_diff
from orders o
如果同一日期有两行,则首先考虑最小的order_id
。还要注意,我已修复了datediff()
语法:在Hive中,该函数仅需要两个日期,并且没有单位。
我只是不了解您要计算num_orders
的逻辑。
可能是这样的:
SELECT
a1.member_id,count(distinct a1.order_id) as num_orders,a1.order_date,DATEDIFF(DAY,a2.order_date) as days_since_last_order
from orders as a1
inner join orders as a2
on a2.member_id = a1.member_id
where not exists (
select intermediate_order
from orders as intermedite_order
where intermediate_order.order_date < a1.order_date and intermediate_order.order_date > a2.order_date) ;