2012-08-15 72 views
1

我有兩個表格與這個問題有關。如何將許多SQL查詢合併爲一個?

第一個是Company其中has_manyTaps。每個Tap都有一個日期字段,說明創建日期(與此處不相關的原因,不同於created_at)。

我想繪製一個公司隨時間變化的頻率Taps,按天分組。這意味着對於我的30天圖,我目前正在爲我的範圍內的每個Date製作一個單獨的SQL查詢,以獲取應用程序點擊,其中:tapped_time = {some date} and :company_id = {id of the company}

如何在連續的範圍內獲取公司每天的點擊次數而不必爲每一天單獨查詢?

我正在使用Ruby on Rails,所以我不需要原始SQL我只需要一些幫助,我的ActiveRecord魔術。

+0

我意識到我是愚蠢的,我可以只加載該範圍內的所有水龍頭,然後在代碼中進行過濾。但是如果任何人有一些ActiveRecord的魔法可以做到這一點,我仍然會很感興趣。 – 2012-08-15 16:11:46

+1

使數據庫返回計數可能會快得多,而不是返回所有行並在應用程序中對它們進行計數。在SQL級別,它會像'SELECT Date,count(*)FROM Taps WHERE CompanyId = x GROUP BY Date ORDER BY Date'。有關如何在ActiveRecord級別達到此目的的建議,請參閱Catcall的答案。 – kgrittn 2012-08-15 17:59:58

回答

2

在SQL中,如果您正在查詢單個公司,則按日期和公司查詢,如果您一次查詢多個公司,則按日期進行分組。

ActiveRecord對此具有group method

+0

如果列是DateTime並且我想按日期進行分組,我可以這麼做嗎? – 2012-08-16 15:18:31

+0

我對此表示懷疑。我認爲在分組之前,你必須將DateTime轉換爲日期。在Ruby 1.9.2+中,DateTime類具有[to_date()方法](http://ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/DateTime.html#method-i-to_date )。你會在SQL中做基本相同的事情 - 將DateTime類型的值或Timestamp類型的值轉換爲日期並對結果進行分組。 – 2012-08-16 16:15:34