sql
  • ruby-on-rails
  • activerecord
  • 2011-06-09 75 views 1 likes 
    1

    该查询工作正常,但作为一个练习,我将如何转换它利用ActiveRecord方法?Rails:这个SQL查询可以重写为使用ActiveRecord吗?

    Model.find_by_sql("SELECT *, SUM(impressions) AS impressions, SUM(cost) AS cost 
            FROM display_stats 
            WHERE (created_at >= '#{(Date.today-2).to_time.strftime('%Y-%m-%d')}' 
              AND created_at <= '#{(Date.today-1).to_time.strftime('%Y-%m-%d')}') 
            GROUP BY banner_id 
            ORDER BY cost DESC") 
    

    这里是我的模型结构:

    DisplayStat (id: integer, 
          banner_id: integer, 
          comments: string, 
          impressions: integer, 
          cost: integer, 
          created_at: datetime, 
          updated_at: datetime) 
    

    是否可以写上面的查询,而无需使用原始的SQL?


    的运转轨道3.1和MySQL 5.5

    回答

    2

    试试这个:

    DisplayStat. 
        select("banner_id, SUM(impressions) AS impressions, SUM(cost) AS cost"). 
        where(:created_at => (2.days.ago.beginning_of_day..2.days.ago.end_of_day)). 
        group(:banner_id). 
        order("cost DESC") 
    

    的日期范围是从开始到一天结束的时候; 2天前。当您将日期范围传递给条件散列时,rails会生成一个BETWEEN运算符。

    相关问题