2011-11-20 2 views
2

첫 번째 부분은 그룹 ID이고 두 번째 부분은 일련 번호라는 점에서 MAC 주소와 비슷한 필드가 있습니다. 내 필드는 영숫자이고 길이는 5 자리이며 첫 3 개는 그룹 ID입니다.고유 한 하위 문자열 값 선택

모든 고유 그룹 ID와 첫 번째 일련 번호를 사전 식으로 제공하는 쿼리가 필요합니다. 내가 SELECT DISTINCT SUBSTRING(ID, 1, 3)을 할 수있는 알고

ID 
----- 
X4MCC 
V21DD 
8Z6BB 

그러나 나는 전적으로 최초의 하나를 얻을하는 방법을 알고하지 않습니다

ID 
----- 
X4MCC 
X4MEE 
X4MFF 
V21DD 
8Z6BB 
8Z6FF 

원하는 출력 : 여기에 샘플 데이터입니다.

+0

. 내가 쿼리를 작업하는 동안 힌트. – Sid

답변

2
SELECT 
    ID 
FROM 
    (
    SELECT 
     ID, 
     ROW_NUMBER() OVER (PARTITION BY SUBSTRING(ID, 1, 3) ORDER BY ID) AS rn 
    FROM MyTable 
    ) oops 
WHERE 
    rn = 1 
+0

그것은 빨랐다! 큰. Upvote. – Sid

+0

이것은 WHERE 근처에서 잘못된 구문을 말합니다. 복사하여 붙여 넣은 다음 필드 이름과 테이블을 실제 테이블로 변경했습니다 ... 오타가 있는지 확인하고 잘못된 것을 보지 못합니다. 방금 실행 한 내부 쿼리를 실행하면 – SupremeDud

+2

@SupremeDud 파생 테이블에 별칭이 필요합니다. –

3

GBN하여 쿼리와 같은 비용을 갖고있는 것 같아요 또 다른 방법 :

나는 비슷한 그룹 ID별로 그룹화 것 및 행 ID를 기반으로 첫 번째를 선택
SELECT MIN(id) 
FROM your_table 
GROUP BY SUBSTRING(id, 1, 3); 
+0

감사합니다. – SupremeDud