如何解决如何在MySql中查找滚动日期差异?
订单:
orderid userid order_date
10 1001 2020-07-11
11 1001 2020-07-13
12 1002 2020-07-15
13 1002 2020-07-17
14 1003 2020-07-20
15 1003 2020-07-24
我正在努力实现以下目标:
orderid userid order_date date_differnce_between_orders
10 1001 2020-07-11 null
11 1001 2020-07-13 2
12 1002 2020-07-15 null
13 1002 2020-07-18 3
14 1003 2020-07-20 null
15 1003 2020-07-25 5
因此,基本上我想分别计算每个用户的日期差,以便进一步计算用户下订单的平均天数。
有人可以帮助“ date_differnce_between_orders”列吗?
解决方法
对于MySql 8.0+,您可以使用窗口函数LAG()
:
select *,datediff(
order_date,lag(order_date) over (partition by userid order by order_date)
) date_differnce_between_orders
from orders
order by orderid;
对于以前的版本,请使用相关的子查询来返回每个用户的先前订单的日期:
select o.*,datediff(
o.order_date,(select max(order_date) from orders where userid = o.userid and order_date < o.order_date)
) date_differnce_between_orders
from orders o
order by o.orderid;
请参见demo。
结果:
> orderid | userid | order_date | date_differnce_between_orders
> ------: | -----: | :----------| ----------------------------:
> 10 | 1001 | 2020-07-11 | null
> 11 | 1001 | 2020-07-13 | 2
> 12 | 1002 | 2020-07-15 | null
> 13 | 1002 | 2020-07-18 | 3
> 14 | 1003 | 2020-07-20 | null
> 15 | 1003 | 2020-07-25 | 5
,
尝试以下查询:
SELECT orderid,userid,order_date,(CASE
WHEN @lastuserid = userid
THEN DATEDIFF(order_date,@date)
ELSE NULL END
) AS date_differnce_between_orders,@lastuserid:=userid,@date:= (CASE WHEN @lastuserid = userid THEN order_date ELSE NULL END)
FROM orders,(SELECT @date:=0,@lastuserid:=0) AS x
ORDER BY userid,order_date
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。