2012-12-17 92 views
2

通过现场分组的最高值获得的行我有如下表从MySQL数据库

+----+----------+-----+ 
| id | priority | sub | 
+----+----------+-----+ 
| 1 | 1  | A | 
| 2 | 3  | A | 
| 3 | 4  | A | 
| 4 | 2  | B | 
| 5 | 9  | B | 
+----+----------+-----+ 

我要去跟每个子优先级最高的行。所以这个结果:

+----+----------+-----+ 
| id | priority | sub | 
+----+----------+-----+ 
| 3 | 4  | A | 
| 5 | 9  | B | 
+----+----------+-----+ 

我试过分组,但是这给出了不可预测的结果。我的猜测是嵌套查询,先开始寻找优先级最高的,像这样:

select max(priority),sub from t group by sub 

这给了我

+----------+-----+ 
| priority | sub | 
+----------+-----+ 
| 4  | A | 
| 9  | B | 
+----------+-----+ 

但我也需要ID,加入到查询明明给我的错ID,加入这个结果与查询在同一个表上给了我一个错误(ER_NONUNIQ_TABLE(1066)),这是有道理的...任何人都可以推动我在正确的方向吗?

+0

'+ 1'用于与期望的结果加样的记录。 –

回答

3

子查询背后的想法是,它分别为每个SUB获得最大值PRIORITY。然后将结果返回到原始表格。

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT sub, max(priority) maxVal 
      FROM tableName 
      GROUP BY sub 
     ) b ON a.sub = b.sub AND 
       a.priority = b.maxVal