2013-10-17 1 views
2

이 시나리오에서는 해당 computer_id에 대한 report_id가 가장 큰 각 개별 computer_id에 대해 operating_system_version을보고하려고합니다.MySQL : 결과를 다른 필드의 최대 값으로 제한하는 방법?

operating_system_version | computer_id | report_id 
10.8 | 1 | 10 
10.9 | 1 | 20 
10.9 | 2 | 11 
10.8 | 2 | 21 

는 위의이 문에 의해 반환됩니다 :

SELECT operating_systems.operating_system_version, 
     reports.computer_id, 
     reports.report_id 
FROM operating_systems 
INNER JOIN reports 
    ON operating_systems.report_id = reports.computer_id 

대신, 각각에 대한 가장 최근의 (가장 높은 REPORT_ID) operating_system_version을 반환하고자

현재, 나는 아래의 결과를 얻고있다 고유 한 computer_id입니다 (예 :

operating_system_version | computer_id | report_id 
10.9 | 1 | 20 
10.8 | 2 | 21 

) QL .. 어떤 도움을 주시면 감사하겠습니다.

+1

이 질문은 매우 일반적입니다. 여러 가지 해결책을 보려면 [태그 : 그룹당 최대 n 개] 태그를 따르십시오. –

+0

Ok 와우. 제안 된대로 훌륭한 게시물을 발견 : http://stackoverflow.com/questions/7745609/sql-select-onlyrows-with-max-value-on-a-column – user1890913

답변

1

명세서 및 설명문별로 그룹을 추가해야합니다.

group by computer_id 

과 같을 것이다으로의 그룹입니다

having report_id= (select max(report_id)) 
0
SELECT operating_systems.operating_system_version, 
     reports.computer_id, 
    reports.report_id 
FROM operating_systems INNER JOIN reports ON operating_systems.report_id = reports.computer_id 
WHERE NOT EXISTS (SELECT 1 
        FROM reports r2 
        WHERE r2.computer_id = reports.computer_id 
        AND r2.reports_id > reports.reports_id) 
+0

아마 내가 n00b이기 때문에,하지만 모두 "where 절에서 알 수없는 열 'r2.reports_id'" – user1890913

0

서브 쿼리가 원하는 최종 결과에 당신을 이끌 것 같을 것이다 갖는

SELECT os.operating_system_version, 
     r2.computer_id, 
     MAX(r2.report_id) 
FROM (
    SELECT DISTINCT computer_id 
    FROM reports 
) r 
INNER JOIN operating_systems os 
    ON os.report_id = r.computer_id 
INNER JOIN reports r2 
    ON r2.computer_id = r.computer_id 
+0

불행히도 이것은 하나의 레코드만을 반환합니다 : operating_system_version | computer_id | MAX (r2.report_id) 10.8 | 2 | 21 필요한 반환 대신 : 10.9 | 1 | 20 10.8 | 2 | 21 각 computer_id에 대해 가장 높은 report_id입니다. – user1890913

관련 문제