2013-05-30 45 views
5

我試圖重新在軌道下面的MySQL查詢3如何通過日和年在Rails3中

select count(id), year(created_at), month(created_at) from table where published_state = 'published' group by year(created_at), month(created_at); 

我已經試過類似組中的Active Record:

results = Table.select('count(id), year(created_at), month(created_at)').where('published_state LIKE ?', 'published').group('year(created_at), month(created_at)') 

但它不會返回我想要的。

我剛剛得到這個回報

[#<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, 
#<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >, #<Table >] 

我怎樣才能做到這一點?

謝謝!

回答

14

試試這個:

Table.where(:published_state => 'published'). 
    group('year(created_at)').group('month(created_at)').count(:id) 

結果的格式不太我期待什麼(它與數組鍵像[year, month]和計數值的哈希),但也許它會成爲你的目的是什麼?

+0

是的,實際上,有一種方法可以在每個結果中包含id的方式嗎? – content01

+0

感謝這個答案幫助我很多... – Sakeer

0

如果你使用PostgreSQL,你也可以使用date_trunc功能(分割線是爲了便於閱讀,但可能不會在現實紅寶石工作):

Table.select('count(id), date_trunc('month', created_at) as month') 
    .where('published_state LIKE ?', 'published').group('month') 

基本上,它截斷或關閉部分切不再重要的日期。例如,如果選擇「月」,它仍然會保留年份與月份但不是日期和時間。

,我可能還需要訂購它像這樣:

Table.select('count(id), date_trunc('month', created_at) as month') 
    .where('published_state LIKE ?', 'published').group('month') 
    .order('month' DESC) 
    .limit(24) 

在文檔here更多。

相關問題