2013-06-26 8 views
0

하나의 열에 중복 값을 포함 할 수있는 테이블이 있습니다. 해당 열의 각 고유 값에 대해 가장 작은 인덱스가있는 행만 선택해야합니다. 나는 distinct() min()과 group by의 많은 조합을 시도했지만이 것을 파악할 수는 없었다. 이 쿼리는 SQL Server 2008에서 실행됩니다.SQL : 하나의 열에 하나의 중복 값이있는 행을 제거하십시오.

color | index | user_id | organization_code 
blue  44   xxx   yyy 
blue  66   xxx   yyy 
red  12   aaa   bbb 
white  55   ccc   ddd 
white  68   xxx   yyy 

쿼리는 첫 번째, 세 번째 및 네 번째 행을 반환합니다.

blue  44   xxx   yyy 
red  12   aaa   bbb 
white  55   ccc   ddd 
+0

"한 열", "해당 열"아래의 예를 참조하십시오 문제에 대한 윈도우 기능을 사용하여 ... 난 당신이 여기를 참조하고있는 하나입니다'color', 또는'USER_ID를 추측 할 수 '또는'organization_code' - 실제로 어떤 열이 "그 열"인지를 신경 써야겠습니까? –

+0

혼란에 빠져서 미안하지만 내 마음을 올바르게 읽었습니다. 나의 예에서 color 칼럼은 관심의 중복을 포함한다. 다른 중복은 성급한 타이핑 결과입니다. – user903724

답변

2

index과 같은 키워드를 열 이름으로 사용하지 마십시오.

select color, [index], [USER_ID], organization_code from (
select *, ROW_NUMBER() over (partition by color order by [index]) as ranker from table 
) Z where ranker = 1 
+2

+1 키워드 힌트입니다. 'user_id' 또한 함수의 이름이기 때문에 나쁜 칼럼 이름이라는 것을 추가 할 것입니다. – jpw

+1

@ 1_CR 또는 reserverd 키워드를 절대적으로 사용해야하는 경우 [index] – JsonStatham

+0

좋은 점 @SelectDistinct 및 jpw와 같이 대괄호로 묶어야합니다. 업데이트 됨 – iruvar

관련 문제