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列总是按顺序排列,则在该列上放置一个索引。通常性能是正常的。您可能会考虑名称、代码列上的索引。