2012-12-01 126 views
0

我必须为报告创建一个MySQL查询。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. 等等...

我如何编写一个查询得到这些类型的报告?

回答

1

为新顺序:从历史中选择不同(ORDER_ID)其中状态=新 新处理:从历史,其中状态=处理 并选择不同的(ORDER_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.status =交付

像这样继续为他人

+0

太好了。如果我还把时间放在WHERE条款中呢?像't3.date_added> t2.date_added和t2.date_added> t1.date_added'。意思是,一个订单是第一个新的,然后设置为流程,然后交付。这样我就可以对状态流进行排序......对吗? –

+0

你可以做到这一点。如果答案有帮助,不要忘记接受它。谢谢。 –