2010-11-22 4 views
0

은 다음 표를 고려하십시오 실제 테이블이 마음에 들지 않기 때문에 나는 가장 빠른 방법이 필요하다는 계정에하시기 바랍니다데이터 그룹화

alt text

이 같은 그룹 뭔가 단지 첫 번째 행 그런 식으로 많은 양의 데이터를 필터링 할 수 있습니다.

미리 감사드립니다.

답변

2

이 당신이

일이 같은 '그룹의 첫 번째'정의하는 방법에 따라 크게 차이 :

select name, min(code) 
from mytable 
group by name 
order by name 
+0

성능은 일반적으로 정상입니다. 당신은 아마도 이름, 코드 열에 대한 색인을 고려할 것입니다. – Randy

0

테이블 이름을 가정하고 테스트입니다 (변화가 당신과 일치하는)이

시도
CREATE TABLE [dbo].[test](
    [name] [varchar](3) NULL, 
    [code] [varchar](5) NULL, 
    [RowNumber] [int] NOT NULL, 
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [RowNumber] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','AED',1) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','BG',2) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','WS',3) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A2','CER',4) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A2','HJY',5) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A5','OLP',6) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A6','LOO',7) 
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A6','AED',8) 

SELECT a.* 
FROM dbo.test a 
     INNER JOIN(SELECT name, 
         MIN(rownumber) AS rownumber 
        FROM dbo.test 
        GROUP BY name) b 
     ON a.name = b.name 
      AND a.rownumber = b.rownumber 
ORDER BY a.name 

RowNumber 열이 항상 순차적 일 경우 해당 열에 인덱스를 넣으십시오.