【问题标题】:MySQL Days Between One Order and Next Order Having > 1 Order一个订单和下一个订单之间的 MySQL 天数 > 1 个订单
【发布时间】:2015-06-19 03:10:56
【问题描述】:

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

  • 0 - 12 个月
  • 13 - 24 个月
  • 25 - 36 个月
  • 37+ 个月

表格是按每个订单上的订单项设置的。像这样:

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 的东西吗?

任何帮助都将不胜感激,至少开始识别所需的查询组件。

【问题讨论】:

  • 您是否希望客户计算多次?或者您正在查看订单之间的平均值?最后一个订单呢?包括在内吗?
  • 能否提供您发布的原始数据的预期结果表?

标签: mysql select lag datediff


【解决方案1】:

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

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;

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

【讨论】:

  • 所有非常好的观点。在确定终身价值时,我们想了解客户多次订购需要多长时间。当他们多次订购时,他们现在被视为“保留”。不幸的是,我相信有很多方法可以将其转化为奇怪的指标
  • @ToddN 。 . .我的怀疑。了解生存和复发事件分析。它专为您想要做的事情而设计,您可能可以在 SQL 中完成您需要做的所有事情。
  • 谢谢 Gordon,为了更准确,我需要了解这一点。但与此同时,您提供的查询就足够了。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2012-04-04
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多