一尘不染

SQL查询,每个组ID仅返回1条记录

sql

我正在寻找一种处理以下情况的方法。我有一个数据库表,对于该表中包含的每个“组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数据库进行查询。


阅读 251

收藏
2021-03-17

共1个答案

一尘不染

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

即使在平局的情况下,每组最多返回一条记录。

有关这两种方法的性能比较,请参阅我的博客中的这篇文章:

2021-03-17