2011-08-26 7 views
3

많은 조인이 포함 된 큰 데이터 세트에 대한 쿼리를 작성하려고 시도하고 있으며 피하려고하는 일종의 하위 쿼리없이 특정 조각을 수행하는 데 문제가 있습니다.그룹의 최대 값으로 레코드를 찾는 방법은 무엇입니까?

ID, Size, Item 열이있는 예제 테이블의 경우 동일한 ID를 가진 여러 레코드가있을 수 있습니다. 가장 큰 크기의 ID 당 기록을 반환하고 싶습니다.

ID Size Item 
1 5 a 
1 10 b 
2 3 c 
2 6 d 
2 11 e 
3 2 f 

예상 결과

ID Size Item 
1 10 b 
2 11 e 
3 2 f 

나는 다양한 그룹과 성공없이 가지고 접근을 시도했습니다.

이 같은 그것을 할 수 있지만 큰 데이터 세트를 위해 내가 이런 식으로

select id, size, item 
from test 
where size = (select max(size) from test t2 where id = test.id) 

어떤 제안을하지 않으려는 하위 쿼리를 사용하십니까? item 가정

답변

5

만들 필요가있다 : 각 ID에 대한 을 가장 큰 크기 만 행을 반환

SELECT test.id, test.size, test.item 
FROM test 
INNER JOIN (
    SELECT id, MAX(size) AS size 
    FROM test 
    GROUP BY id 
) max_size ON max_size.id = test.id AND max_size.size = test.size 
0
SELECT id, item, MAX(size) 
FROM Test 
GROUP BY id, item 

id 발생할 때마다 동일하다.

+0

항목이 더 복잡하게 만드는 것입니다있는 다릅니다. 이를 명확하게하기 위해 예제 데이터를 추가했습니다. –

0
select id, max(size), item 
from test 
group by id, item 

편집 : 아, 방금 추가 한 데이터가 변경되어 위 쿼리가 더 이상 적용되지 않습니다.

0

당신은이 쿼리를 사용할 수 있습니다 (나는 당신의 쿼리를 의미) 그러나 이것은 당신의 요구 사항을 만족해야한다 지수 (ID, 크기)

+0

.... 그리고 쿼리는?!?!? 어디에?!?!? .... –

+0

제공된 쿼리가 나에게 가장 적합합니다. 그래서 나는 그것을 사용하는 것에 대한 제안을 추가했다. –

1
WITH T AS (SELECT * , 
         ROW_NUMBER() OVER (PARTITION BY ID 
               ORDER BY Size DESC) AS RN 
       FROM  YourTable 
      ) 
    SELECT ID , 
      Size , 
      Item 
    FROM T 
    WHERE RN = 1 
관련 문제