Mysql 獲取訂單表中每個會員的最新訂單


SELECT 
    uid,
    MAX(id) id 
  FROM
    project_order 
  GROUP BY uid

說明:GROUP BY 分組 col 中必須有分組的字段出現,其他字段只能使用聚合函數,否則會報錯

SELECT 
    uid,
    MAX(expire_time) expire_time,MAX(id) id ,order_no
  FROM
    project_order 
  GROUP BY uid

報錯:錯誤代碼: 1055
Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'movie.project_order.order_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

可以看出是sql_mode 問題。這里不再陳述

方法一:

SELECT 
   a.*
FROM
  project_order a 
WHERE 1 > 
  (SELECT 
    COUNT(*) 
  FROM
    project_order 
  WHERE uid = a.uid 
    AND id > a.id) 
ORDER BY a.uid 

說明:這種方式可以輸出任意你想要的字段

還有以下幾種:

方法二:

 SELECT 
   a.*
FROM
  project_order a 
  INNER JOIN 
    (SELECT 
      uid,
      MAX(id) id 
    FROM
      project_order 
    GROUP BY uid) b 
    ON a.uid = b.uid 
    AND a.id = b.id 
ORDER BY a.uid
 SELECT 
  a.*
FROM
  project_order a 
WHERE NOT EXISTS 
  (SELECT 
    1 
  FROM
    project_order 
  WHERE uid = a.uid 
    AND id > a.id)
SELECT 
  a.*
FROM
  project_order a 
WHERE id = 
  (SELECT 
    MAX(id) 
  FROM
    project_order 
  WHERE uid = a.uid) 
ORDER BY a.uid 
SELECT 
  a.*
FROM
  project_order a,
  (SELECT 
    uid,
    MAX(id) id 
  FROM
    project_order 
  GROUP BY uid) b 
WHERE a.uid = b.uid 
  AND a.id = b.id 
ORDER BY a.uid 

說明:當uid沒有設置為索引的時候,以上執行效率差別明細,當設置uid為索引時,差別幾乎可以忽略。

 


免責聲明!

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



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