SQL查询每组ID只返回1条记录

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)

即使是关系,这也将返回每组最多一条记录.

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

  • 出于某种原因,SQL Server在关键字"WHERE"附近给出了"消息156,级别15,状态1,行7"的语法错误. (5认同)