2011-10-24 3 views
0

간단한 SQL 쿼리를 수행하고 싶지만 올바르게 처리 할 수는 없습니다.SQL simple SUBSELECT

의 내가 X 열을 포함하는 테이블 FOOBAR 있다고 가정 해 봅시다

(죄송 예를 들어, 그게 내가 내 문제를 설명하기 위해 생각할 수있는 전부), 만 3 열이 나에게 유용하다.

DogKind_Id, FoodQuantity, Day_Id 

각 DogKind_Id에 대해 FoodQuantity가 최대 인 날을 알고 싶습니다. 그래서 같은 FOOBAR 테이블 :

DogKind_Id, FoodQuantity, Day_Id 
1,2, 2 
1,10,1 
1,4,5 
2,3, 3 
2,9,1 
2,87,5 
3,0, 3 
3,0,2 
3,1,6 

내 쿼리의 결과는 다음과 같습니다

DogKind_Id, Day_Id 
1,1 
2,5 
3,6 

지금까지, 나는이 일에 성공 :

SELECT DogKind_Id, MAX(FoodQuantity) 
FROM FooBar 
GROUP BY DogKind_Id 

을하지만 관리 할 수 ​​없습니다 단순히이 결과를 사용하여 Day_Id를 얻습니다. 위의 SELECT에서 Day_Id를 사용하면 많은 행을 추가합니다 ... SUISELECT, EXISTS를 시도했지만 분명히 잘못하고 있습니다!

나 좀 도와 줄 수있어?

+0

어떤 데이터베이스를 사용하고 있습니까? mysql? 신탁? 포스트 그레스? – Bohemian

+0

이 정보를 추가했지만 편집이 바로 끝났습니다 ... SQL Server ... –

+0

@AndyM, 태그가 Sql-server로 추가되었습니다 –

답변

1
SELECT parent.DogKind_id, parent.Day_Id 
FROM FooBar AS parent 
INNER JOIN (
    SELECT DogKind_Id, MAX(FoodQuantity) AS Max 
    FROM FooBar 
    GROUP BY DogKind_Id 
) AS child ON (parent.DogKind_Id=child.DogKind_Id) AND (parent.FoodQuantity = child.Max) 

기본적으로 내부 쿼리는 ID/최대 값을 가져 오는 버전입니다. 그런 다음이 하위 쿼리에 대해 외부 쿼리를 결합하여 최대 식량을 가진 레코드의 수를 파악하여 관련 dayid를 얻을 수 있습니다.

+0

고맙습니다, 그게 완벽합니다! –