2012-09-02 122 views
0

我是新來的SQL端。所以如果這個問題聽起來很容易,那麼請讓我免費。我有一個SQL表中的4 coloumns。讓我們說A,B,C,D。對於任何BC組合,我可以獲得任意數量的行。我需要得到最多3行(這給出了3個唯一的A值用於該BC組合),對於這些選定的行,我應該有D的前3個最大值。與該BC組合的其他條目相比。前3條最大條目組合條件

所以可以有任意數量的BC組合,所以上面的邏輯應該暗示給所有人。

+1

這些列的數據類型是ABCD?以及您如何彙總每個唯一A值的BC值?你可以添加一些示例數據嗎? –

回答

1

歡迎來到Stackoverflow。當問一個問題時,你應該提供你正在使用的數據庫版本和樣本數據。

大多數數據庫都支持排名功能。有了這些,你可以做你想要的如下:

select A, B, C, D 
from (select t.*, 
      row_number() over (partition by B, C order by D desc) as seqnum 
     from t 
    ) t 
where seqnum <= 3 
order by B, C, D desc 

row_number()函數創建一個序列號。該數字在非常B,C組中的「1」處開始,並且按D降序排列。