2013-04-08 2 views
0

Я создаю приложение, и я считаю необходимым выполнить некоторые простые математические вычисления в моем запросе. По сути, у меня есть база данных с ежедневными значениями из S & P 500, и мне нужно получить список дней в зависимости от введенных критериев.Как выполнить математические вычисления в Active Record Querying в Rails

Пользователь вводит как дневной диапазон, так и диапазон%. Например, если диапазон дат составляет 1 января 2013 года - 1 апреля 2012 года, а диапазон% - -1% - 1%, он должен возвращать список всех суточных значений S% P 500 между датами, в которых разница между открытием и значения закрытия находятся в диапазоне%.

Проблема в том, что на самом деле у меня нет столбца для%; У меня есть только столбец для значений открытия/закрытия. Достаточно просто рассчитать%, учитывая только значения открытия и закрытия (закрытые)/открытые * 100. Но я не уверен, как это сделать в запросе.

В настоящий момент запрос успешно выполняет поиск в диапазоне дат. Мой запрос:

@cases = Close.find(:all, conditions:["date between ? and ?", 
    @f_start, @f_end]) 

Но как я могу получить его, чтобы проверить, если (закрыть-открыть)/открыть * 100 значения текущей строки находится между значениями диапазона два%?

В качестве альтернативы, если это невозможно или в плохой практике, где я должен обращаться с этим?

ответ

0

Вы можете рассчитать радиус действия в пределах Ruby/Rails и передать его так же, как в случае с диапазоном дат. Что-то вроде:

percent = @f_percent/100.0 # 5% => 0.05 
low = @f_close * (1.0 - percent) 
high = @f_close * (1.0 + percent) 
Close.where 'date between ? and ? AND close between ? and ?', \ 
    @f_start, @f_end, low, high 
Смежные вопросы