2014-03-01 2 views
1

내 SQL 피들입니다.SQL 두 개의 열을 그룹화하여 최대 값 선택

http://sqlfiddle.com/#!2/7f0780/1/0

가 나는 그룹이 열() 값을 최대를 얻을 때 잘못된 관련된 데이터를 반환하는 문제를 갖고있는 것 같다.

ID가 잘못 표시됩니다.

누군가 나를 도와 줄 수 있습니까?

create table table1 (id int,id1 int, id2 int, version int); 
insert into table1 values 
(1,7,9,1), 
(2,7,9,2), 
(3,7,9,3), 
(4,7,9,4), 
(5,9,7,5), 
(6,9,7,6); 


SELECT max(version),id 
     FROM table1 
     group BY 
       id1,id2 



MAX(VERSION) ID 
4    1 
6    5 
+1

+1. . . 어떻게하면 "여기 내 SQL 피들"이 시작되고 문제가 무엇인지 설명하는 질문을 upvote하지 않을 수 있습니까? –

답변

1

귀하의 SQL 쿼리는 다음 두 개의 열로 그룹화되어

SELECT max(version), id 
FROM table1 
group BY id1, id2 

참고. 그러나 select 문에서 둘 중 하나를 선택하지 않았습니다. 대신 id이 있습니다. id의 값은 MySQL documentation에서 설명한대로 임의의 행에서 가져옵니다. 내 충고는 당신이 정말로하고있는 일을 정말로 이해하지 않는 한,이 확장을 절대로 사용하지 않는 것입니다. 당신은 최대 값과 관련된 ID를 원하는 경우

, 당신은 not exists를 사용하여 수행 할 수 있습니다 ID1/ID2 쌍의 버전이 더 큰 가치가없는 곳

입니다
select * 
from table1 t 
where not exists (select 1 
        from table1 t1 
        where t1.id1 = t.id1 and 
         t1.id2 = t.id2 and 
         t1.version > t.version 
       ); 

table1에서 모든 행을 선택 .

편집 :

내가 성능상의 이유로 그를 추가해야합니다, table1(id1, id2, version)에 대한 인덱스는이 쿼리에게 많은 도움이 될 것입니다.

+0

아니요, 't1.version> t.version'이 맞습니다 : 버전에 대한 더 큰 값은 존재하지 않아야합니다 (id1, id2의이 조합에 대해) – wildplasser

관련 문제