假设我有两个表:customers
和orders
订单包含以下列:
order_created
customer_id
客户拥有以下列:
id
name
email
我正在尝试构建一个查询,以显示最新客户订单的平均范围,例如:
我对MySQL不是很熟悉,但到目前为止我已经设法获得最大值。
select max(o.order_created), c.id, c.name, c.email,
(date(max(o.order_created)) - date(min(o.order_created))) as date_interval
from orders o
inner join customers c
on c.id = o.customer_id
group by c.id
having date_interval > 0
当然, min
不起作用,因为我需要检索第二个最大值,而不是最小值。毕竟,它需要检索所有这些查询的平均值,我不知道如何构建。
我该如何处理?
谢谢大家。
@Edit 我认为重复的标记不能解决我的问题
答案 0 :(得分:2)
一种方法是计算每个客户的最新订单获得第1行的行号,然后计算最新订单和下一个最新订单之间的日期差异(对于那些至少有2个订单的客户)
select t1.customer_id,
datediff(max(case when rownum=1 then order_date end) ,
max(case when rownum=2 then order_date end)
)/2.0 diff
from (select o.*,
@rn:=if(@previous=customer_id,@rn,0) + 1 as rownum,
@previous:=customer_id
from orders o, (select @rn:= 0, @previous:= null) t
order by customer_id,order_date desc) t1
join (select customer_id from orders group by customer_id having count(*) > 1) t2
on t1.customer_id=t2.customer_id
group by t1.customer_id