如何解决SQL:连续行之间的差异
具有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) ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。