select *
from accounts
where account_id in (
select o.account_id
from orders as o inner join line_items as li on li.order_id = o.order_id
group by o.account_id, li.product_id, year(o.purchase_date), month(o.purchase_date)
having count(*) = 2
)
легкий способ получать информацию об учетной записи, хотя вы теряете информацию о покупке.
Вот метод, который держит информацию вместе с обоими order_ids и календарного месяца заказов:
select *
from
accounts as a inner join
(
select
o.account_id, li.product_id,
year(o.purchase_date) as purchase_yr, month(o.purchase_date) as purchase_mo,
min(o.order_id) as order_id1, max(o.order_id) as order_id2
from orders as o inner join line_items as li on li.order_id = o.order_id
group by o.account_id, li.product_id, year(o.purchase_date), month(o.purchase_date)
having count(*) = 2
) as multiples
on multiples.account_id = a.account_id
Пожалуйста редактировать свой вопрос, чтобы показать запрос, который вы используете, и объяснить, почему вы «обеспокоены с объем возвращаемых записей ". –
Я угадываю, что поле идентификатора заказа - это то, что отбрасывает вас, удалите это поле. Также у вас есть поле count для наличия> 1? – JB13
Какая СУБД вы используете? Postgres? Oracle? –