在Mysql中,如何选择两个最高值并比较之间的日期

时间:2016-10-13 13:51:23

标签: mysql sql

假设我有两个表:customersorders

订单包含以下列:

order_created
customer_id

客户拥有以下列:

id
name
email

我正在尝试构建一个查询,以显示最新客户订单的平均范围,例如:

  • 从所有客户那里获得两份最新订单(当然只选择订单超过1份的客户)
  • 比较日期并检索从o1到o2(所有客户)的平均时间

我对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 我认为重复的标记不能解决我的问题

1 个答案:

答案 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