2013-01-15 59 views
1
id | field_1 | field_2 
1 | a  | 1 
2 | b  | 1 

SELECT id, field_1 FROM table GROUP BY field_2 

這將得到id = 1的行,我如何獲得具有最大id的行? (我想獲得field_1 = b)。這是實現這個最簡單的方法嗎?當分組sql時選擇行

感謝您的幫助!

+0

另請參見:http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html –

回答

2
SELECT t1.id, t1.field_1, t2.IdSum 
FROM table t1 
INNER JOIN 
(
    SELECT field_2, MAX(id) id, SUM(id) IdSum 
    FROM Table 
    GROUP BY field_2 
) t2 on t1.id = t2.id 
    AND t1.field_2 = t2.field_2; 
+0

謝謝!我還想要返回組中包含的行數,我試圖在第一個SELECT中添加SUM(1),但是這導致分組失敗。你會知道該怎麼辦? – lawls

+0

@lawls - 查看我的編輯。 –

+0

謝謝,作品完美! – lawls

2

這種表達不定義得到的第一行:

SELECT id, field_1 
FROM table 
GROUP BY field_2 

它所做的是從任意行獲取值的field2每個值。任意行可能是第一行,但沒有保證。瞭解這一點,請查看documentation隱藏列。

在MySQL中,你需要一個連接來獲得最高id的行。以下是一種方法:

select t.* 
from t 
where id = (select max(id) from t t2 where t2.field2 = t.field2) 

這將爲field2的每個值提取最高id的所有行。

+0

謝謝,很好解釋。 – lawls