【问题标题】:MySQL Reporting - Order HistoryMySQL 报告 - 订单历史
【发布时间】:2012-12-01 16:38:21
【问题描述】:

我必须为报告创建一个 MySQL 查询。

我有一张表history,它记录了产品订单的状态变化。对于订单的生命周期(订单流程),我有以下状态:新、已确认、正在处理、已发货、已交付、已取消、已退回。订单不一定遵循此状态流,例如:新订单可以立即取消,也可以在处理过程中取消。这使得准确的报告更加复杂。

现在我想针对已确认、处理、发货和交付的订单制作供应链报告。但此报告应不包括在任何阶段取消或退回的订单。

考虑这个例子:

客户下了订单 (id: 34)。初始状态:新。由代理确认,状态设置为已确认。供应链经理验证可用性、处理状态的变化,然后发货,然后交付。

另一个订单 (id: 55) 来了,新的,已确认,正在处理,但已取消。 history 看起来像:

id  order_id status
111 34       new
112 34       confirmed
113 55       new
114 55       confirmed
115 55       processing
116 34       processing
117 55       cancelled
118 34       shipped
119 34       delivered

如何进行报表查询以仅获取那些订单

  1. 已确认、处理、发货和交付。
  2. 已确认、已处理、已取消。
  3. 确认,取消
  4. 等等……

如何编写查询来获取这些类型的报告?

【问题讨论】:

    标签: mysql reporting


    【解决方案1】:

    对于新订单:从 status = new 的历史记录中选择 distinct(order_id) 对于新处理的:从状态=已处理的历史记录中选择不同的(订单ID) 等等

    对于那些新的、已处理并已交付的订单

    从历史中选择 t1.order_id 作为 t1,历史作为 t2,历史作为 t3,其中 t1.order_id=t2.order_id 和 t2.order_id=t3.order_id 和 t1.status=new 和 t2.status = 已处理和 t3。状态 = 已交付

    其他人也这样

    【讨论】:

    • 太好了。如果我也把时间放在WHERE 子句中会怎样。喜欢t3.date_added > t2.date_added and t2.date_added > t1.date_added。意思是,订单首先是新的,然后设置为流程,然后交付。这样我也可以对状态流进行排序......对吗?
    • 是的,你可以这样做。如果答案有帮助,请不要忘记接受它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 2022-10-15
    • 1970-01-01
    • 2023-01-07
    • 2021-08-13
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多