GROUP BY 后獲取每一組最新的一條記錄


最近有個需求,一個訂單可能會存在多個支付單,需要我們獲取每個訂單最新的支付單。思路如下:
寫一個子查詢,該子查詢負責查詢每個訂單最新的支付單ID,然后和支付單表進行內關聯查詢。
情況一:數據庫主鍵自增情況,取ID最大的那條記錄

SELECT id,
       xx,
       xxx,
       xxxx,
       xxxxx
FROM txxx t1,
     (SELECT MAX( id ) AS id FROM txxx GROUP BY order_id ) AS t2
WHERE t1.id = t2.id

情況二:數據庫主鍵是UUID,無法比較,利用創建時間字段,取時間最近那條記錄

SELECT id,
       xx,
       xxx,
       xxxx,
       xxxxx,
       create_time
FROM txxx t1,
     (SELECT SUBSTRING_INDEX(GROUP_CONCAT(id order by create_time desc),',',1) AS id FROM txxx GROUP BY order_id ) AS t2
WHERE t1.id = t2.id

或者將子查詢放進IN里

SELECT id,
       xx,
       xxx,
       xxxx,
       xxxxx
FROM txxx t1,
WHERE t1.id IN (SELECT MAX( id ) AS id FROM txxx GROUP BY order_id)

還有一種思路:先按照時間或ID倒序排序,然后再分組,這樣取到的每一組都是最新的

SELECT id,
       xx,
       xxx,
       xxxx,
       xxxxx
FROM ( SELECT * FROM txxx ORDER BY id DESC ) t
GROUP BY
    order_id

參考鏈接:https://blog.csdn.net/qq_35069223/article/details/84343961
     https://www.jb51.net/article/23969.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM