MySQL 一个订单和下一个订单之间的天数 > 1 个订单

MySQL Days Between One Order and Next Order Having > 1 Order

我的目标是找出有多少客户在以下条件之间多次订购。或者换句话说,客户根据这些条件下 下一个 订单需要多长时间:

Table 由每个订单的行项目设置。像这样:

Customer | Item  | OrderNumber | OrderDate
1500       item1   5555          2015-02-01
1500       item2   5555          2015-02-01
1500       item34  5255          2014-05-25
1500       item44  4100          2012-12-30
2200       item55  5100          2014-02-15
2200       item1   5100          2014-02-15
3255       item12  5300          2015-03-05
3255       item34  5399          2014-05-01
3255       item22  5399          2014-05-01

因此,如果客户多次订购的时间少于 12 个月,则应计入“0-12 个月”。如果客户在 18 个月内下了下一个订单,他们将被计入“13-24 个月”,依此类推。

我真的不知道从哪里开始。我可能必须至少拥有:HAVING COUNT(DISTINCT OrderNumber) > 1。我从未使用过 LAG,我是否应该使用 MySQL 变体来查找序列中的下一个 OrderDate

如果能至少开始识别所需查询的组成部分,我们将不胜感激。

如果你只是想要订单之间的平均时间,你可以这样做:

select floor(days_between / 365) as numyears, count(*)
from (select customer, datediff(max(orderdate), min(orderdate)) as days_between
             count(*) as numorders
      from orders
      group by customer
      having count(*) >= 2
     ) c
group by numyears;

如果您真的想了解订单之间的时间安排,请学习生存分析,尤其是重复事件分析。您的问题虽然结构合理,但相当幼稚,因为它没有考虑只有一个订单的客户,也没有考虑自客户上次订单以来的时间。