加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:24:21 所属栏目:MsSql教程 来源:网络整理
导读:我正在寻找一种方法来处理以下情况.我有一个数据库表,我需要为表中包含的每个“组ID”返回一个记录,此外,每组中选择的记录应该是家庭中最老的. ID Group ID Name Age1 134 John Bowers 372 134 Kerri Bowers 333 135 John Bowers 444 135 Shannon Bowers 42
我正在寻找一种方法来处理以下情况.我有一个数据库表,我需要为表中包含的每个“组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
        )
WHERE   rn = 1

即使是关系,这也可以返回每个组最多一个记录.

在我的博客中看到这篇文章,用于两种方法的性能比较:

> SQL Server: Selecting records holding group-wise maximum

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读