在 SQL Server 中,我一直发现获取数据集的最大行数很痛苦,我正在寻找检索最大行数的方法列表,并提供一些关于性能和可维护性的指导。
样品表:
DECLARE @Test TABLE (ID INT IDENTITY(1,1), name VARCHAR(50),
dateOfBirth DATETIME, TaxNumber varchar(10))
INSERT INTO @Test (name, dateOfBirth, TaxNumber)
SELECT 'Fred', convert(datetime, '25/01/1976', 103), '123' UNION ALL
SELECT 'Bob', convert(datetime, '03/03/1976', 103), '234' UNION ALL
SELECT 'Jane', convert(datetime, '13/06/1996', 103), '345' UNION ALL
SELECT 'Fred', convert(datetime, '14/02/1982', 103), '456' UNION ALL
SELECT 'Bob', convert(datetime, '25/10/1983', 103), '567' UNION ALL
SELECT 'Jane', convert(datetime, '12/04/1995', 103), '678' UNION ALL
SELECT 'Fred', convert(datetime, '03/03/1976', 103), '789'
select * from @Test
给出:
ID name dateOfBirth TaxNumber
----------- --------- ----------------------- ----------
1 Fred 1976-01-25 00:00:00.000 123
2 Bob 1976-03-03 00:00:00.000 234
3 Jane 1996-06-13 00:00:00.000 345
4 Fred 1982-02-14 00:00:00.000 456
5 Bob 1983-10-25 00:00:00.000 567
6 Jane 1995-04-12 00:00:00.000 678
7 Fred 1976-03-03 00:00:00.000 789
如果我想检索最年长的人(按姓名分组)的完整详细信息,我可以使用哪些方法?
期望的输出:
ID name dateOfBirth TaxNumber
----------- --------- ----------------------- ----------
1 Fred 1976-01-25 00:00:00.000 123
2 Bob 1976-03-03 00:00:00.000 234
6 Jane 1995-04-12 00:00:00.000 678
两种常用方法:聚合和排名函数。
聚合适用于 SQL Server 2000。两种方式都可以使用 CTE 或派生表
对于性能,我发现聚合效果更好。但是,看起来 SQL Server 2008 排名函数比在 SQL Server 2005 上运行得好得多。我还没有每天使用 SQL Server 2008(大型恐龙公司),所以无法发表评论。
有 2 个相关的 SO Questions 但我目前找不到它们。一个是关于具有排名功能的高逻辑 IO 的问题,另一个是测试 SQL 2k5 vs 2k8 评论中的排名。对不起。