我有跟隨着表結構TOP 1分組
person_id organization_id 1 1 1 2 1 3 2 4 2 2
我想要的結果設置爲
person_id organization_id 1 1 2 4
指的person_id
我有跟隨着表結構TOP 1分組
person_id organization_id 1 1 1 2 1 3 2 4 2 2
我想要的結果設置爲
person_id organization_id 1 1 2 4
指的person_id
TOP1您正在使用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返回順序與頁面上的行順序或插入順序無關。
快速的問題,它是無關的......分句子句做什麼? – Sid
可能出現[獲得每組最多1行]的副本(http://stackoverflow.com/questions/6841605/get-top-1-row-of-each-group) – GSerg
這裏表的排序是什麼? –
你不能這樣做,除非你的表中有一些其他列定義你需要的順序。不能依賴您在沒有訂單子句的情況下保持不變。沒有指定順序,「top 1」沒有意義。 – Blorgbeard