MySQL报告 - 订单历史

时间:2012-12-01 16:38:22

标签: mysql reporting

我必须为报告创建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. 等......
  5. 如何编写查询以获取此类报告?

1 个答案:

答案 0 :(得分:1)

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

对于那些新的,处理和交付的订单

从历史记录中选择t1.order_id为t1,历史记录为t2,历史记录为t3,其中t1.order_id = t2.order_id,t2.order_id = t3.order_id,t1.status = new,t2.status = processed和t3。 status =已发送

像这样继续其他人