Я отображаю график с Subscription
подсчетами, которые в какой-то момент могли быть soft_destroyed_at
.
Для этого я запускаю запрос для каждого месяца, который, конечно, не так хорош, как одинбольшой гудящий запрос, но мои навыки работы с SQL снова подводят меня.
Вот как я делаю это в Ruby:
months = (0..12).map { |i| i.months.ago.end_of_month }
stats = Hash[months.map do |eom|
[
eom.beginning_of_month.to_date,
Subscription.where(
'created_at < ?' \
'AND (soft_destroyed_at IS NULL ' \
' OR soft_destroyed_at > ?) ' \
'AND (suspended_at IS NULL ' \
' OR suspended_at > ?)',
eom, eom, eom
).count
]
end]
# => { 2018-04-01 => 10, 2018-03-01 => 15, ... }
Как я могу написать это как один запрос, используя ActiveRecord - или, если необходимо, используя raw SQL>
База данных Postgres 10.2, приложение Rails 5.2.
Спасибо!