2010-09-28 83 views
0

快速查看並再次找不到我的問題。所以我希望這裏有人能夠幫助。 我有一個與下面類似結構的大桌子。mysql按小時彙總多個列

DateTime | InboundUserID | OutboundUserID | CustomerUserID | Cost | Mins | Account Number

我想組以上數據爲每小時塊,結果在另一臺具有相似結構存儲到下面。

Date | HourFrom | HourTo | SumMins | SumCost | OutboundUserID | CustomerUserID | Account Number

我已經寫了下面的代碼/查詢爲了做到這一點,但它並不完全正確。基本上這個小組意味着並不是所有的數據都被彙總。例如,當查看新創建的表時,我擁有所有OutboundUserID數據,但沒有任何CustomerUserID數據。

for(int i=0;i <=23;i++) 
    { 
     for(int j=1 ; j <=31 ; j++) 
     { 
      String Time = String.format("%02d", i); 

      query = "INSERT DELAYED INTO correlated_calls_hourly " + 
        " SELECT DateOnly,HourFrom,HourTo,DURATION,CALLCOUNT,`Price Group ID`,INBOUNDCOST,INBOUNDREVENUE,`InboundCustomerID`,OUTBOUNDCOST,OUTBOUNDREVENUE,`Outbound Customer ID`,`Customer ID`,`Account Number`,`Service` FROM" + 
        " ("+ 
         " SELECT "+ 
         /* snip sum(),case and date/time part of query */ 
         " GROUP BY DateOnly,`InboundCustomerID`,`OutboundCustomerID`,`CustomerID`,`AccountNumber`,`PriceGroupID`,`Service`" + 
        ")a "; 
     } 
    } 

我已經採取了創建三個不同的表由OutboundUserID/InboundUserID/CustomerUserID分別彙總數據的步驟。但如果我可以讓這個總結表正確工作,那將會更加優雅。

如果有人可以幫助我想辦法通過單個sql查詢來獲得所需的結果,我會非常感激。

提前感謝

艾倫

+0

你有沒有考慮過使用視圖?如果您只是想將數據連接在一起以形成一種「報告」表格,創建單個表格似乎有點過分。 – DrColossos 2010-09-28 10:43:55

+0

我曾想過這件事。不幸的是,大桌子現在有1200萬行,每天增長大約500,000行。我相信這是超出了簡單觀點的範圍? – 2010-09-28 12:39:02

回答

0

會是這樣的工作?

INSERT INTO correlated_calls_hourly (Date, HourFrom, HourTo, SumMins, SumCost, OutboundUserID, CustomerUserID, AccountNumber) 
SELECT 
    CONVERT(varchar(8), GETDATE(), 112), 
    hour(DateTime), 
    hour(DateTime) + 1, 
    SUM(Mins), 
    SUM(Cost), 
    OutboundUserID, 
    CustomerUserID, 
    AccountNumber 
GROUP BY 
    CONVERT(varchar(8), GETDATE(), 112), 
    hour(DateTime) 
    OutboundUserID, 
    CustomerUserID, 
    AccountNumber 

convert函數將datetime轉換爲日期。你可能需要稍微調整一下以適應你的RDBMS,但我看不出有什麼理由不起作用。

+0

感謝您的回覆。問題在於由多個鍵值(InboundUserID | OutboundUserID | CustomerUserID)組成的分組不能正常工作。 – 2010-10-11 10:58:10

0

經過一番激勵,我意識到解決方案是顯而易見的。將這些列重新組合在一起,並在連接列上進行分組。

CONCAT(InboundUserID, '',OutboundUserID, '',CustomerUserID)作爲唯一鍵 GROUP BY唯一鍵。