我知道標題沒有說太多,但讓我解釋一下我的情況,根據數值選擇頂層1:SQL - 從兩列
我有如下表:
現在,我想從每個部門中選擇前1名,但我不想獲取重複的職位ID,因此我希望每個部門的頂級員工按項目數量排列,但職位ID不同。結果是突出顯示的行。
我知道標題沒有說太多,但讓我解釋一下我的情況,根據數值選擇頂層1:SQL - 從兩列
我有如下表:
現在,我想從每個部門中選擇前1名,但我不想獲取重複的職位ID,因此我希望每個部門的頂級員工按項目數量排列,但職位ID不同。結果是突出顯示的行。
您不能保證返回的職位是最好的。一個職位可能是兩個部門中最好的,在這種情況下,其中一個結果約束需要放寬。
所以,這裏有一種方法可以獲得排名最高但部分不同的部分(也許是全部)部門。首先選擇每個部門中排名最高的員工。這些是項目最多的一個。
然後,對於每個PositionTypeId
,從這些替代方案中選擇一個隨機部門。然後,爲每個部門選擇一個隨機的職位類型。下面的查詢採取了這種辦法:
select DepID, EmplyeeID, PositionTypeId, NumProjects
from (select t.*, row_number() over (partition by DepId order by newid()) as seqnum
from (select t.*, row_number() over (partition by PositionTypeId order by newid()) as position_seqnum
from (select t.*,
dense_rank() over (partition by DepId order by NumProducts desc
) as rank_seqnum
from t
) t
where rank_seqnum = 1
) t
where position_seqnum = 1
) t
where seqnum = 1;
這是不保證返回的行每個部門。但是,保證返回的所有部門都會有不同的職位類型,而且這些行對於該部門來說是最好的。你或許可以努力調整中間步驟,以確保更大範圍的部門。但是,因爲問題不能保證有解決方案,所以這種調整可能比他們的價值更大。
不完全是我需要的,但是它完成了這項工作。謝謝!! – Mike
第二個突出顯示的行有可能是錯的嗎?它不應該是EmplyeeID 580824 DepID 484646(其中有52個項目)嗎?也許我誤解了這個問題。 – Franco
你說得對。對不起。在這種情況下,EmplyeeID 580824將被選中。我錯過了。 – Mike