溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

group by 查找訂單的最新狀態(tài) join

發(fā)布時間:2020-06-05 06:29:22 來源:網(wǎng)絡(luò) 閱讀:1019 作者:努力的C 欄目:MySQL數(shù)據(jù)庫

Order:sn
Procedures:sn,status
1、 有訂單表和流程表。
訂單表含有訂單的詳細(xì)信息【假設(shè)沒有訂單狀態(tài)哈】,每個訂單有好多種狀態(tài):已付款、處理中、待收貨等等。現(xiàn)在的需求可能是查詢訂單狀態(tài)是待收貨的所有訂單的信息。
【答】先找到最新狀態(tài)是待收貨的所有訂單,然后和訂單表做一個left join,就可以得到了。
一、 先找最新狀態(tài)是待收貨的所有訂單。
本來拍腦袋一想是group by order by 取第一條,然后試了一下,發(fā)現(xiàn)group by取回來的并不是最新狀態(tài)的,而是分組后的第一條。這是因?yàn)樵?a title="MySQL" target="_blank" href="http://kemok4.com/mysql/">MySQL中語句的執(zhí)行順序是先執(zhí)行g(shù)roup by 然后執(zhí)行order by .很明顯這就不可能得到最新的一條了。我們可以這樣查出每個訂單的最新狀態(tài)
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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI