2009-10-12 2 views
5

У меня есть база данных с некоторыми полями, которые я хотел бы суммировать. Но это не большая проблема, я хочу сгруппировать эти поля к тому месяцу, который они создали. ActiveRecord automaticaly создал поле с именем «created_at». Итак, мой вопрос; как я могу сгруппировать результат по месяцам, а затем суммировать поля за каждый месяц?Выбор, группа и сумма из базы данных

Обновлено с кодом

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
        :group => "strftime('%m', created_at)", 
        :order => 'created_at DESC') 

Это код, который я есть сейчас. Управляется группами по месяцам, но не удается суммировать два моих поля: «mins» и «зарплата», которые мне нужно суммировать

ответ

1

Fixed его с помощью: выберите при получении запроса, inputing выбирает вручную

@hours = Hour.all(:conditions => "user_id = "+ @user.id.to_s, 
        :select => "created_at, SUM(time) time", 
        :group => "strftime('%m', created_at)", 
        :order => 'created_at DESC') 
1

Я не знаю, есть ли SQL-запрос, который вы используете для этого (без изменения текущей структуры таблицы). Однако вы делаете это с некоторыми строками кода.

records = Tasks.find(:conditions => {..}) 
month_groups = records.group_by{|r| r.created_at.month} 
month_groups.each do |month, records| 
    sum stuff.. blah blah blah.. 
end 

Я видел эту ссылку с правой стороны этого вопроса. Я предполагаю, что другие базы данных, кроме MySQL, имеют схожие функции.

mysql select sum group by date

2

Вы можете использовать active record calculations, чтобы сделать это. Некоторые примеры кода могут быть

Model.sum(:column_name, :group => 'MONTH("created_at")') 

Очевидно, что с оговоркой МЕСЯЦА является MySQL конкретные, так что если вы разрабатывали на базе SQLite это не будет работать.

+0

см редактирования в первом посте для кода у меня в это время. Вы что-то вроде писали. – ThoKra

+0

Обновлено: http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html – Meekohi

 Смежные вопросы

  • Нет связанных вопросов^_^