我有以下表结构
person_id organization_id 1 1 1 2 1 3 2 4 2 2
我希望结果集为
person_id organization_id 1 1 2 4
表示person_id
答案 0 :(得分:1)
您正在使用SQL Server,因此您可以使用row_number()
。但是,如果没有订购,您实际上无法定义top
- 结果无法保证。
因此,以下内容将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返回顺序与页面上的行顺序或插入顺序几乎没有关系。