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

이 식은 하지는 정의에 의해 첫 번째 행을 얻을 않는다 : 그것은 field2의 각 값에 대해 임의 행의 값을 얻을 무엇

SELECT id, field_1 
FROM table 
GROUP BY field_2 

한다. 임의의 행이 최초의 행인 경우도 있습니다. 다만, 보증은 없습니다. 이것을 이해하려면 숨겨진 열에 대해서는 documentation을보십시오.

MySQL에서는 가장 높은 ID를 가진 행을 가져 오기 위해 조인이 필요합니다. 한 가지 방법이 있습니다 :

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

이렇게하면 field2의 각 값에 대해 가장 높은 ID를 가진 모든 행을 가져옵니다.

+0

잘 설명해 주셔서 감사합니다. – lawls