我有以下表结构
person_id 组织 ID 1 1 1 2 1 3 2 4 2 2
我希望结果集为
person_id 组织 ID 1 1 2 4
意味着TOP1的person_id
我有以下表结构
person_id 组织 ID 1 1 1 2 1 3 2 4 2 2
我希望结果集为
person_id 组织 ID 1 1 2 4
意味着TOP1的person_id
您正在使用 SQL Server,因此您可以使用row_number()
. 然而,你真的不能在top
没有排序的情况下定义——结果是不能保证的。
因此,以下将在没有 a 的top
情况下执行order by
:
select person_id, min(organization_id)
from t
group by person_id;
但是,我假设您打算将行的顺序作为预期的顺序。唉,SQL 表是无序的,所以排序是无效的。您确实需要一个id
或creationdate
或其他东西来指定订单。
综上所述,您可以尝试以下方法:
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 返回顺序与页面上的行顺序或插入顺序几乎没有关系。