SQL Server中的数据分组 请考虑下表:

SQL Server中的数据分组 请考虑下表:,sql,sql-server,tsql,sql-server-2008,greatest-n-per-group,Sql,Sql Server,Tsql,Sql Server 2008,Greatest N Per Group,正如您所看到的,Name列中有一些重复的值,它们类似于一个组 我需要有一个查询,以便只获取组的第一行,如下所示: select name, min(code) from mytable group by name order by name 请考虑到我需要最快的方法,因为实际的表不是这样的,可能有很多数据要用这种方法过滤 提前感谢。这在很大程度上取决于您如何定义“团队中的第一位” 大概是这样的: select name, min(code) from mytable group by nam

正如您所看到的,
Name
列中有一些重复的值,它们类似于一个组 我需要有一个查询,以便只获取组的第一行,如下所示:

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

请考虑到我需要最快的方法,因为实际的表不是这样的,可能有很多数据要用这种方法过滤


提前感谢。

这在很大程度上取决于您如何定义“团队中的第一位”

大概是这样的:

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

假设表名为test(更改以匹配您的表名),请尝试以下操作

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列总是按顺序排列,则在该列上放置一个索引。

通常性能是正常的。您可能会考虑名称、代码列上的索引。