group by 查找訂單的最新狀態 join

Order:sn
Procedures:sn,status
1、 有訂單表和流程表。
訂單表含有訂單的詳細信息【假設沒有訂單狀態哈】,每個訂單有好多種狀態:已付款、處理中、待收貨等等。現在的需求可能是查詢訂單狀態是待收貨的所有訂單的信息。
【答】先找到最新狀態是待收貨的所有訂單,然後和訂單表做一個left join,就可以得到了。
一、 先找最新狀態是待收貨的所有訂單。
本來拍腦袋一想是group by order by 取第一條,然後試了一下,發現group by取回來的並不是最新狀態的,而是分組後的第一條。這是因爲在MySQL中語句的執行順序是先執行group by 然後執行order by .很明顯這就不可能得到最新的一條了。我們可以這樣查出每個訂單的最新狀態
select sn,max(status) from procedures group by sn .
正確的是下面的寫法,自己和自己做個join,最後再和order join。
SELECT a.id, a.sn, a.created_at,a.type FROM (SELECT sn, max(created_at) created_at FROM procedures GROUP BY sn ) b JOIN procedures a ON a.sn = b.sn AND a.created_at = b.created_at where a.type=11

select c.*,tmp.type from complaints as c right join (
SELECT a.id, a.sn, a.created_at,a.type FROM (SELECT sn, max(created_at) created_at FROM procedures GROUP BY sn ) b JOIN procedures a ON a.sn = b.sn AND a.created_at = b.created_at where a.type=11
) as tmp on tmp.sn=c.sn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章