我正在寻找一种处理以下情况的方法。我有一个数据库表,对于该表中包含的每个“组ID”,我只需要返回一条记录,此外,在每个组中选择的记录应该是家庭中年龄最大的人。
ID Group ID Name Age 1 134 John Bowers 37 2 134 Kerri Bowers 33 3 135 John Bowers 44 4 135 Shannon Bowers 42
因此,在上面提供的示例数据中,我需要返回ID 1和3,因为它们是每个组ID中年龄最大的人。
正在针对SQL Server 2005数据库进行查询。
SELECT t.* FROM ( SELECT DISTINCT groupid FROM mytable ) mo CROSS APPLY ( SELECT TOP 1 * FROM mytable mi WHERE mi.groupid = mo.groupid ORDER BY age DESC ) t
或这个:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn FROM mytable ) x WHERE x.rn = 1
即使在平局的情况下,每组最多返回一条记录。
有关这两种方法的性能比较,请参阅我的博客中的这篇文章: