Есть две таблицы:
orders [ id | order_id | shipment_date ] - таблица с заказами
orders_items [ id | sku | order_id | quantity ] - таблица с товарами заказа
Задача: получить последнюю запись по конкретному SKU, а точнее его "order_id" за 20 дней до текущего момента, но при этом количество товаров в данном заказе должно быть равно "1" и в единственном экземпляре.
Получился такой запрос:
SELECT orders.order_id,shipment_date FROM orders left join orders_items ON (orders_items.order_id = orders.order_id) WHERE orders_items.sku='$sku' and place_order=0 and (select count(id) from orders_items where order_id=orders.order_id)=1 and orders_items.quantity=1 and shipment_date<=(NOW() - INTERVAL 20 day) order by orders.id desc limit 1
Но, выполняется он чуть ли не пару минут. Уже сломал голову, как оптимизировать. Попробовал даже новомодные нейросети, но те выдают вот такой нерабочий запрос:
SELECT o.order_id, o.shipment_date FROM orders o WHERE o.place_order = 0 AND o.shipment_date <= (NOW() - INTERVAL 20 DAY) AND EXISTS ( SELECT 1 FROM orders_items oi WHERE oi.order_id = o.order_id AND oi.sku = '$sku' AND oi.quantity = 1 ) GROUP BY o.order_id HAVING COUNT(o.order_id) = 1 ORDER BY o.id DESC LIMIT 1;
Что скажете, в каком направлении копать?