Ser*_*off 0 sql postgresql activerecord ruby-on-rails squeel
我有这个Ruby代码:
def visits_chart_data(domain)
last_12_months.collect do |month|
{ created_at: month, count: domain.visits.created_on_month(month).count }
end
end
def last_12_months
(0..11).to_a.reverse.collect{ |month_offset| month_offset.months.ago.beginning_of_month }
end
Run Code Online (Sandbox Code Playgroud)
CreatedOnMonth只是一个范围:
scope :created_on_month, -> (month = Time.now) { where{ (created_at >= month.beginning_of_month) & (created_at <= month.end_of_month) } }
Run Code Online (Sandbox Code Playgroud)
created_at 只是一个标准的日期时间戳.
如何优化它以进行一次查询而不是12?
我看到有些人使用GROUP_BY,但是我对PostgreSQL不太好,能够自己构建这样的查询.查询应按年份对记录进行分组并返回计数.也许有人可以帮助我.谢谢.
如果您想在每年的每个月分组,请使用date_trunc()您GROUP BY子句中的功能:
GROUP BY date_trunc('month', created_at)
Run Code Online (Sandbox Code Playgroud)
如果您希望每年按月分组,请使用EXTRACT()您的GROUP BY子句中的功能:
GROUP BY EXTRACT(MONTH FROM created_at)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |