Rails: группировка и сумма при добавлении последних значений (Фибоначчи) - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь сгруппировать сумму кавычек в месяц, добавляя последние суммы.

Например:

Jan: 300€
Fev: 200€
Mars: 100€

Группа должна вернуть:

Jan:300€
Fev: 500€ (200 + Jan's 300)
Mars: 600€ (100 + Fev's 500)

Текущий SQL:

current_user.quotes.group_by_month(:created_at, last: 12).sum(:price)

Я использую камень groupdate.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Если используется postgresql, вы можете использовать Функция Windows

  1. UNBOUNDED PRECEDING первая строка, CURRENT ROW текущая строка
  2. используйте функцию sum для накопления

как это.

select name,sum(price) 
         over(order by (select 1) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)  "price"
from T

sqlfidde: http://sqlfiddle.com/#!17/763e3/7

Функция вдов

0 голосов
/ 02 мая 2018

Мы можем использовать следующий код для этого

 quotes = current_user.quotes
 sum = 0
 quotes.each_with_object({}) do |quote,hassh|
     hassh[quote.name] = sum = quote.price + sum
 end
 hassh
0 голосов
/ 02 мая 2018

Решение в рубине:

s = 0
current_user.quotes.group_by_month(:created_at, last: 12).
  sum(:price).
  transform_values.map { |v| s += v }

, поскольку существует только хэш из 12 элементов, я предлагаю снижение производительности при использовании ruby ​​вместо sql, которые являются незначительными. Использовать SQL было бы намного сложнее и невозможно только с помощью простых методов ActiveRecord Arel или, возможно, для конкретной базы данных, см., Например, Расчет накопленной суммы в PostgreSQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...