-2

我有以下表结构

person_id 组织 ID
1 1
1 2
1 3
2 4
2 2

我希望结果集为

person_id 组织 ID
1 1
2 4

意味着TOP1的person_id

4

1 回答 1

1

您正在使用 SQL Server,因此您可以使用row_number(). 然而,你真的不能在top没有排序的情况下定义——结果是不能保证的。

因此,以下将在没有 a 的top情况下执行order by

select person_id, min(organization_id)
from t
group by person_id;

但是,我假设您打算将行的顺序作为预期的顺序。唉,SQL 表是无序的,所以排序是无效的。您确实需要一个idcreationdate或其他东西来指定订单。

综上所述,您可以尝试以下方法:

select person_id, organization_id
from (select t.*,
             row_number() over (partition by person_id order by (select NULL)) as seqnum
      from t
     ) t
where seqnum = 1;

它绝对不能保证工作。根据我的经验,order by (select NULL))返回行的顺序与select-- 尽管没有关于此效果的文档(我已经找到)。请注意,在一个大小合适的表上的并行系统中,SQL Server 返回顺序与页面上的行顺序或插入顺序几乎没有关系。

于 2013-07-16T20:03:19.933 回答