Найдите последнюю запись в предыдущем месяце для сравнения в рубине - PullRequest
0 голосов
/ 22 октября 2018

Немного странно.Предположим, у меня есть таблица базы данных в приложении rails 4, как это.

таблица данных

И эта таблица представлена ​​моделью, представляющей собой Metric.Вы можете видеть, что последний показатель за предыдущий месяц имел значение для total_users, равное 100, а самое последнее значение для total_users равно 105.

Что мне нужно сделать, это сравнитьсамое последнее значение total_users с последним значением за предыдущий месяц и с разницей.Поэтому, если мы назовем эту переменную @net_addition, на данный момент значение должно быть '5', то есть разница между 100 и 105.

Очевидно, что последняя запись проста, будучи Metric.order("created_at").last.

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

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

Кто-нибудь может заставить меня начать?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018
last_month = Time.current - 1.month
Metric.order("created_at").where(
  created_at: last_month.beginning_of_month..last_month.end_of_month
).last

Использование диапазона создает предложение WHERE created_at BETWEEN a AND b.

0 голосов
/ 22 октября 2018

Вы можете охватить диапазон дат

start_date = 1.month.ago.beginning_of_month
end_date = 1.month.ago.end_of_month

Metric.where(created_at: start_date..end_date)
      .order(created_at: :desc).first
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...