2013-06-17 3 views
0

이상한 질문 제목에 대해 유감스럽게 생각하지만 실제로 이것을 압축 방식으로 설명하는 방법을 모르겠습니다.이상한 SQL 그룹 쿼리?

우리 고객은 데이터베이스에서 중복 레코드를 제거하는 쿼리를 작성하고 싶습니다. 다음과 같은 샘플 데이터 세트가있는 경우 :

╔══════╦════════╦════════╦═══════════════╗ 
║ Code ║ Amount ║ Client ║  Type  ║ 
╠══════╬════════╬════════╬═══════════════╣ 
║ 'a' ║ 950 ║ 'Lisa' ║ 'Available' ║ 
║ 'b' ║ 550 ║ 'Bob' ║ 'Unavailable' ║ 
║ 'b' ║ 500 ║ 'Bob' ║ 'Available' ║ 
║ 'c' ║ 500 ║ 'Dave' ║ 'Available' ║ 
║ 'c' ║ 500 ║ 'Dave' ║ 'Unavailable' ║ 
╚══════╩════════╩════════╩═══════════════╝ 

각 레코드마다 고유 한 식별자가 없습니다 (불행히도). '코드'는 하나의 엔티티를 참조하지만 여러 레코드가있을 수 있습니다. 예를 들어 SELECT Code, Amount, Client, Type, GROUP BY '코드'를 입력하고 MIN(Amount) 인 레코드를 선택합니다.

GROUP BY를 사용하여 코드 및 최소 (금액)을 가져올 수 있지만 이러한 특정 레코드에 대해 모든 열을 선택하는 데 문제가 있습니다.

+0

사용하는 RDBMS? –

답변

1

당신이 ROW_NUMBER 기능을 원하는 당신이 얻을 수 있습니다 사용하는 RDBMS 내용에 따라 :

select code, amount, client, type 
from (select *, row_number() over (partition by code order by amount) as rowrank 
     from table 
    ) sub 
where rowrank = 1 
+0

MS SQL Server를 사용하고 있습니다. - 감사 드려요. – Goose