2012-01-20 32 views
1

我有我的應用程序的oracle後端。架構的設計使我可以將用戶事務拆分爲12個月度事務處理表,每個月處理一個事務處理表。現在,我想要檢索在給定日期範圍內訪問最多不同文檔的前10位用戶。
我目前有一個查詢,它對每個用戶的文檔進行countDistinct,按這個計數的降序排序並從中選擇前10個結果。
我在每個表上運行此查詢,並將所有結果附加到列表中。我必須掃描這個列表,然後每月統計一次,然後按user_id進行分組,以獲得所有12個月中每個用戶的文檔總計。
我意識到這個計數不是正確的計數,因爲可能有同一用戶在不同的月份訪問過相同的文檔。用我目前的邏輯,這些數字會加起來。
問題與多個表中的前10個不同值

我需要知道應該使用哪種策略,以便結果最準確..我知道一種方法是從單個表格進行查詢,這肯定會給我正確的答案,但是我可以實現這一點查詢全部12個表格?

這裏是一月

class TxnSummJan { 
    Long id 
    Transaction trans 
    Users grauser 
    Resources graresource 
    Integer transactioncount 
    Date lastaccesseddate 
    Date currentdate 
    String accountid 
    String userlocation 

    String documentname 

    String eventdesc 
    } 

類似表格每個月..

回答

2

它再次。
您能否將UNION ALL應用於所有12個表格,然後將其視爲視圖?

SELECT 
    documentname, 
    user, 
    accesscount 
    --and other columns 
FROM 
(
    SELECT 
     documentname, 
     user, 
     accesscount 
     --and other columns 
    FROM 
     txn_jan 

    UNION ALL 

    SELECT 
     documentname, 
     user, 
     accesscount 
     --and other columns 
    FROM 
     txn_feb 

    --and other monthly summary tables 

) yearly_summary 
+0

如果我正確理解OP,不會有重複,因爲不同的表代表事務集合的不相交子集。所以你應該使用'UNION ALL'而不是'UNION',這樣數據庫不會浪費時間檢查重複項。 –

+0

這樣一個關於「爲用戶選擇不同文檔名稱組,在日期之間選擇12個表」的聯合,創建視圖然後再按用戶計數(文檔名稱)組? –

+0

@pri_dev你需要創建一個如上所述的視圖,然後只做一個「選擇不同的文檔...」。 @大衛華萊士同意,性能問題在這裏是一個問題。 – cctan

1

你可以做一個視圖,它確實在所有12桌的union all樣本月度表。然後從視圖中選擇。