MySQL 一个订单和下一个订单之间的天数 > 1 个订单
MySQL Days Between One Order and Next Order Having > 1 Order
我的目标是找出有多少客户在以下条件之间多次订购。或者换句话说,客户根据这些条件下 下一个 订单需要多长时间:
- 0 - 12 个月
- 13 - 24 个月
- 25 - 36 个月
- 37+ 个月
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;
如果您真的想了解订单之间的时间安排,请学习生存分析,尤其是重复事件分析。您的问题虽然结构合理,但相当幼稚,因为它没有考虑只有一个订单的客户,也没有考虑自客户上次订单以来的时间。
我的目标是找出有多少客户在以下条件之间多次订购。或者换句话说,客户根据这些条件下 下一个 订单需要多长时间:
- 0 - 12 个月
- 13 - 24 个月
- 25 - 36 个月
- 37+ 个月
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;
如果您真的想了解订单之间的时间安排,请学习生存分析,尤其是重复事件分析。您的问题虽然结构合理,但相当幼稚,因为它没有考虑只有一个订单的客户,也没有考虑自客户上次订单以来的时间。