2017-12-11 20 views
1

I는 다음과 같습니다 일부 데이터가 :SQL 추출 최대

Sector   Category   rec_coun 
------   --------   --------- 
A    25    53 
A    24    1911 
A    23    2010 
A    ..    .. 
A    1    190 
B    25    787877 
B    24    931231231 
B    ..    .. 
8    1    778787 
.. 
C    1    6666 

은 내가 얻고 싶은 것은 각 부문, 최대 레코드 수와 관련된 카테고리를 들어, 테이블 보여주는입니다 섹터와 카테고리의 조합 (예 : 위의 예에서는

Sector    Category  Max Recs 
------    --------  -------- 
A      23    2010 
B      24    931231231 
.... 

) 나는 이상적으로 이것을 하나의 단계로하고 싶다. 시도했습니다.

select distinct [Sector], [Category], max(rec_cnt) 
from table 
group by [Sector], [Category] 
having rec_cnt = max(rec_cnt) 

좋지 않습니다. 가능한 경우 중첩 된 쿼리에서 내부 조인을 피하는 것이 가장 좋지만 마지막으로 최선을 저장하십시오. 나는 실제로 SQL Server 2000을 사용하고 있으므로이 작업이 다소 까다로울 수 있습니다.

select distinct [Sector], 
FIRST_VALUE(Category) over (partition by Sector order by rec_cnt desc) as [Category], 
max(rec_cnt) over (partition by Sector) as [rec_cnt] 
from table 

편집 : 좋아,이 작동하지 않을 수

+0

지원되는 소프트웨어로 업데이트해야합니다. SQL Server 2000은 수년 동안 지원되지 않았습니다. –

답변

2

나는 GROUP BY 확인도 SQL Server에서 2000

select t.[Sector], table.[Category], t.max_rec 
from table 
join 
(
    select distinct [Sector], max(rec_cnt) max_rec 
    from table 
    group by [Sector] 
) t ON table.[Sector] = t.[Sector] and table.rec_cnt = t.max_rec 
0

트릭을해야 간단한 윈도우 기능을 사용한다 중첩 사용 믿습니다 창 기능은 SQL Server 2005부터 시작되었으므로 Radim의 대답을 참조하십시오.