I have this query
SELECT t1.date_added, t1.order_id, t1.firstname AS customer, t1.name AS product_name, t1.category, t1.supplier, t1.quantity, t1.price, t1.total
FROM (
SELECT o.date_added, op.order_id, o.firstname, op.name, op.price, op.total, op.quantity, m.name AS supplier,
(CASE WHEN skps.buy_price IS NULL THEN (SELECT skps2.buy_price FROM `oc_stock_kps` skps2 WHERE skps2.buy_price != '0' ORDER BY skps2.id DESC LIMIT 1)
ELSE skps.buy_price
END) AS buy_price,
(SELECT GROUP_CONCAT(cd.name SEPARATOR ' / ') FROM oc_category_description cd LEFT JOIN product_to_category ptc ON (ptc.category_id = cd.category_id) WHERE ptc.product_id = p.product_id) AS category,
LAG(op.name) OVER(ORDER BY op.order_product_id) prev
FROM `oc_order_product` op
LEFT JOIN oc_order o ON (op.order_id = o.order_id)
LEFT JOIN oc_product p ON (op.product_id = p.product_id)
LEFT JOIN oc_manufacturer m ON (p.manufacturer_id = m.manufacturer_id)
LEFT JOIN oc_stock_kps skps ON (skps.product_id = op.product_id AND skps.order_id = op.order_id)
WHERE (o.date_added BETWEEN '2021-02-01 00:00:00' AND '2021-02-28 23:59:00')
AND p.product_id != '0'
AND o.order_status_id = '5'
) t1
WHERE t1.prev IS NULL OR t1.name<>t1.prev
ORDER BY t1.date_added
LIMIT 12
The problem is every time I'm using this
(CASE WHEN skps.buy_price IS NULL
THEN (SELECT skps2.buy_price FROM `oc_stock_kps` skps2
WHERE skps2.buy_price != '0'
ORDER BY skps2.id DESC LIMIT 1)
ELSE skps.buy_price
END) AS buy_price,
and this
LEFT JOIN oc_stock_kps skps
ON (skps.product_id = op.product_id
AND skps.order_id = op.order_id)
it making queries took too long.
Is there any way to make it faster?