2015-12-21 49 views
0

我有一個TBL稱之爲tbl_test其中汽車無數據被插入,它在它具有colums從SQL tbl獲取兩個最頻繁的數據?

時間具有大約10^6條

Acquire_Id(在1至20值),

STATUS_MSG(間值'A' 到 'Z'),

STATUS_CODE 1之間(值至26)

有一對一的映射的b/W STATUS_MSG和STATUS_CODE

現在我想獲得兩個最頻繁的STA tus_msg和Staus_Code計算每個收單行如果它們存在於表

查詢應該節約成本

+0

(1)用樣本數據和期望的結果編輯您的問題。 (2)我刪除了無關的數據庫標籤。請爲您實際使用的數據庫添加適當的標籤。 –

回答

0

大多數數據庫支持ANSI標準的窗口函數。你可以得到你想要的聚集值後使用row_number()(或rank()dense_rank(),這取決於關係如何返回)的東西。

下面正好返回兩行對每個收單行(即使有關係)。

select t.* 
from (select t.acquire_id, t.status_msg, t.status_code, count(*) as cnt, 
      row_number() over (partition by t.acquire_id order by count(*) desc) as seqnum 
     from tbl_test t 
     group by t.acquire_id, t.status_msg, t.status_code 
    ) t 
where seqnum <= 2; 
相關問題