2012-10-01 66 views
0

我試圖獲得商業周的電話數量。我寫的SQL:Rails - 日期查詢使用group by和count

select strftime('%W', date_time_origination) as week, count(*) 
from calls 
group by week; 

我又試圖在軌運行此,首先使用此:

calls_by_week = Call.select("strftime('%W',date_time_origination) as week, count(*) as total_number_of_calls").group("week") 

這回正確的數據多次重複對象,但集合(JSON表示):

[{ "total_number_of_calls": 5435, "week": 39 },.....] 

鑑於它應返回一個對象,我試圖改變軌道查詢結構:

calls_by_week = Call.select("strftime('%W', date_time_origination) as week").group("strftime('%W', date_time_origination)").count 

這一次,該查詢返回一個哈希值,減去名爲PARAMS:

{ "31": 3123, "32": 1231,... } 

我想擁有的數據,以JSON,現分述如下:

{ "week": 31, "total_number_of_calls": 12412,.....} 

是有消除第一個查詢產生的重複的方法嗎?

回答

0

第一:如果您使用Call.select(...)導軌將嘗試實例化Call對象。你想要的不是Call對象,只是哈希值。您可以使用Call.connection.execute("SELECT .... blah blah").to_enum.to_a並使用得到的數組數組。

但你的結果轉換爲哈希表,使用

returned_hash = { "31": 3123, "32": 1231,... } 
what_you_want = returned_hash.collect do |k,v| 
    {"week" => k.to_i, "total_number_of_calls" => v.to_i} 
end 

另一種方法是使用.uniq應用於查詢,它仍然會建造Call對象,但至少他們不會有反覆的數據。