Я использую Rails 5 и Postgresql.Мои модели выглядят следующим образом: Вариант has_many line_items LineItem own_to Order Order has_many LineItems
Что мне нужно сделать, так это сделать левый внешний переход к таблице вариантов с line_items и заказами, чтобы рассчитать сумму заказов и общую сумму, сгруппированные по вариантам,Мне нужно оставить вариант соединения слева с заказами, выполненными в определенный диапазон дат, однако добавление этого условия в таблицу заказов (правая сторона соединения) приводит к исключению множества записей из левой стороны варианта.Ниже мой оригинальный запрос
Spree::Variant.left_outer_joins(line_items: :order)
.where(spree_orders: { completed_at: params[:start_date]..params[:end_date] })
.select('spree_variants.*, SUM(spree_line_items.quantity) as sales_count, SUM(spree_line_items.quantity * spree_line_items.price) as sales_amount')
.group('spree_variants.root_variant_id, spree_variants.id')
Что я пытаюсь сделать сейчас, это включить условие даты между в объединении, но всегда получаю ошибку, вот что я пытаюсь сделать и не могу найтиошибка.
Spree::Variant.joins("LEFT OUTER JOIN spree_line_items ON spree_line_items.variant_id = spree_variants.id LEFT OUTER JOIN spree_orders ON spree_orders.id = spree_line_items.order_id AND spree_orders.completed_at BETWEEN #{params[:start_date]} AND #{params[:end_date]}")
.select('spree_variants.*, SUM(spree_line_items.quantity) as sales_count, SUM(spree_line_items.quantity * spree_line_items.price) as sales_amount')
.group('spree_variants.root_variant_id, spree_variants.id')
Параметры start_date и end_date следующие:
params[:end_date] = Time.current.end_of_day
params[:start_date] = (Time.current - 200.days).beginning_of_day
то есть параметры [: end_date]
Пн, 04 февраля 201923:59:59 EET +02: 00
SQL, созданный моим вторым запросом, дублируется, он выдает 2 точных запроса SQL. У кого-нибудь есть лучшее решение или идея, как это исправить?