2012-12-01 196 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

你可以做到這一點。如果答案有幫助,不要忘記接受它。謝謝。 –