从每个GROUP BY(unique_id)和ORDER BY编号中选择具有MAX id的行

use*_*193 5 mysql

我有id,unique_id和order_number的表.

  1. 我想通过unique_id来GROUP行
  2. 我想从每个组中获取MAX id行
  3. 最后我想通过order_number对行进行排序

我也有几个WHERE条款.这是我的尝试不起作用:

SELECT MAX(id) AS id
     , order_number
  FROM table 
 WHERE final = 0 
   AND username = '$username' 
   AND active = 1 
 GROUP 
    BY unique_id 
 ORDER 
     BY order_number
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 21

您可以将查询用作子查询:

SELECT *
FROM table 
WHERE id IN (SELECT MAX(id) AS id
             FROM table 
             WHERE final=0 AND username='$username' AND active=1 
             GROUP BY unique_id) 
ORDER BY order_number
Run Code Online (Sandbox Code Playgroud)

或者,如果id不是唯一的,请使用JOIN:

SELECT t1.*
FROM table AS t1
JOIN (SELECT MAX(id) AS max_id, unique_id
      FROM table           
      WHERE final=0 AND username='$username' AND active=1 
      GROUP BY unique_id
) AS t2 ON t1.unique_id = t2.unique_id AND t1.id = t2.unique_id
ORDER BY order_number
Run Code Online (Sandbox Code Playgroud)

  • 或者在后一种情况下可能只是“WHERE (id, unique_id) IN (SELECT MAX(id), unique_id FROM...”。 (2认同)