Ric*_*est 22 sql sql-server sql-server-2005
我正在寻找一种方法来处理以下场景.我有一个数据库表,我只需要为表中包含的每个"组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
Run Code Online (Sandbox Code Playgroud)
因此,在上面提供的示例数据中,我需要返回ID 1和3,因为它们是每个组ID中最老的人.
正在针对SQL Server 2005数据库查询此问题.
Qua*_*noi 31
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
Run Code Online (Sandbox Code Playgroud)
或这个:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
FROM mytable
)
WHERE rn = 1
Run Code Online (Sandbox Code Playgroud)
即使是关系,这也将返回每组最多一条记录.
请参阅我的博客中的这篇文章,了解两种方法的性能比较: