2012-12-17 111 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