#ruby-on-rails-3 #data-modeling
#ruby-on-rails-3 #моделирование данных
Вопрос:
Вот мои две модели:
class Account < ActiveRecord::Base
has_many :values
end
class Value < ActiveRecord::Base
belongs_to :account
end
В моей модели учетной записи у меня есть атрибут: name и атрибут: type, где я выбираю либо «проверка», либо «сбережения». Каждый квартал года я записываю сумму для каждой учетной записи, это учитывается в модели стоимости. Модель значений имеет атрибут :quarter (либо 1, 2, 3, либо 4), атрибут :year и атрибут :amount. Некоторые учетные записи обновляются каждый квартал года, а некоторые нет. Так, например, у меня мог бы быть текущий счет, который имеет значения для 1,2,3 и 4-го кварталов 2010 года, а затем другой текущий счет со значениями только для 1-го и 2-го кварталов. Каждый раз, когда вводится квартал, это просто обновление предыдущего квартала, а не текущий совокупный итог.
Что я хочу сделать, так это запустить запрос, который покажет мне среднюю стоимость моего счета за прошлый год для определенного типа счета «проверка» или «сбережения». Проблема, с которой я борюсь, заключается в том, что я не могу просто выполнить запрос и подвести итог за весь год, потому что только последнее введенное значение (упорядоченное по:quarter и:year) является фактическим значением, а не итогом всех кварталов. Итак, как мне, например, просмотреть все «текущие» учетные записи и извлечь:amount из самой последней введенной записи значения, независимо от того, было ли это за 1-й квартал или за 4-й?
Ответ №1:
Я бы использовал временную метку created_at value
записи для упорядочивания результатов. Похоже, вам нужна самая последняя запись значения в заданном диапазоне. Если вы не можете упорядочить результаты по дате, можете ли вы просто упорядочить по :quarter DESC
и использовать первый результат?
Не забывайте об использовании функций AVG() на стороне SQL server: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_avg
Также ознакомьтесь http://ar.rubyonrails.org/classes/ActiveRecord/Calculations/ClassMethods.html
Комментарии:
1. вроде того. Скажем, например, у меня есть 4 расчетных счета, на одном счете был 1-й квартал, на другом 1-й и 2-й, на другом 1-й, 2-й и 3-й, а на последнем были введены все 4 квартала. Я хочу усреднить значение по всем 4 текущим учетным записям на основе последней записи для каждой учетной записи. Итак, в этом примере это были бы все разные кварталы. Имеет ли это больше смысла?