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為索引時,差別幾乎可以忽略。