最近有個需求,一個訂單可能會存在多個支付單,需要我們獲取每個訂單最新的支付單。思路如下:
寫一個子查詢,該子查詢負責查詢每個訂單最新的支付單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