2010-03-12 5 views
3

아래 데이터에서 원하는 결과를 생성하는 sql을 작성하려고합니다.SQL : 최대 개수의 전체 레코드 얻기

데이터 :

IDNum Opt1 Opt2 Opt3 Count 
1  A  A E 1 
1  A  B J 4 
2  A  A E 9 
3  B  A F 1 
3  B  C K 14 
4  A  A M 3 
5  B  D G 5 
6  C  C E 13 
6  C  C M 1 

원하는 결과 :

IDNum Opt1 Opt2 Opt3 Count 
1  A  B J  4 
2  A  A E  9 
3  B  C K  14 
4  A  A M  3 
5  B  D G  5 
6  C  C E  13 

는 기본적으로 나는 각 ID 민, 가장 높은 횟수와 전체 레코드,합니다. 나는 그룹을 만들려고했으나 Opt1, Opt2, Opt3별로 그룹화하면 각 (ID Num, Opt2, Opt3, Opt4) 조합에 대해 가장 높은 수를 반환하기 때문에이 옵션이 작동하지 않습니다. ID 번호로만 그룹화하면 각 ID 번호에 대해 최대 값을 얻을 수 있지만 어떤 (Opt1, Opt2, Opt3) 조합이이 값을 제공하는지에 대한 정보가 손실됩니다.

이전에 해본 것처럼 느껴졌지 만 SQL에서는 자주 작동하지 않으므로 기억이 안납니다. 이 작업을 수행하는 쉬운 방법이 있습니까?

+0

특정 행을 선택하기 위해 ID 열이 있습니까 (아니면 하나 추가 할 수 있습니까)? 나는 그것이 하나없이 가능하다고 생각하지 않는다. –

답변

1

편집 액세스하기 전에 질문을 명확히하면 효과가있었습니다. 이 쿼리가 지원되는지 여부를 알기 위해 액세스 권한이 없습니다.


나는 이것이 SQL Server에서 작동한다고 생각합니다.

물론
select * from data 
inner join (select idnum, max(count) from data 
      group by idNum)sub 
on sub.IdNum=data.IdNum && sub.Count=data.Count 

당신이 두 행을 반환하는 것과 같은 수를 두 아이디의이 있다면 ...이 같은

+0

예, 죄송합니다. 디자인보기에서 쿼리를 "볼"수 없다면 이러한 종류의 작업은 액세스 할 수 있습니다. 내 상사가 이해할 수 있도록 할 일은 두 가지 쿼리로 분할하고 세 번째로 조인을 수행하는 것입니다. 감사합니다. – oob

+0

디자이너도 사용해야합니까? – JoshBerke

+0

불행히도 저는 그렇게합니다. 비 프로그래밍 관련 작업에 대한 빠른 결과가 필요한 경우 시간을 절약 할 수 있지만 수제 SQL에 작성할 각 하위 쿼리에 대해 새로운 쿼리를 실제로 디자인해야하기 때문에 하위 쿼리에는 큰 어려움이 있습니다. – oob

1

뭔가 :

SELECT * FROM table AS t1 
JOIN (SELECT id, max(count) as Id FROM table GROUP BY id) AS t2 
ON t1.id = t2.id AND t1.id = t2.id 

이 더 IDNUM이 같은 최대가 없다고 가정 계산 또는 두 idnums

0

이 쿼리 시도 얻을 것이다 :

SELECT * FROM my_table 
GROUP BY IDNum 
HAVING Count = MAX(Count) 

Access에서 작동해야하지만 테스트하지 않았습니다.