微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL:连续行之间的差异

如何解决SQL:连续行之间的差异

具有3列的表格:订单ID,会员ID,订单日期

enter image description here

需要按会员编号将按天数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;

这并不能完全帮助我,因为我需要的输出是:

enter image description here

解决方法

您可以使用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 举报,一经查实,本站将立刻删除。