2013-01-15 27 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