Я пытаюсь написать запрос для Redshift на основе заказов на продукцию. Таблица содержит столбцы, такие как store_id, order_number, order_datetime, products_ordered, order_time. Запрос, который я пытаюсь написать, выбрал бы из этой таблицы, и для каждой строки он включал бы некоторую статистику, основанную на предыдущем часе заказов в этом магазине.
В настоящее время я могу сделать что-то вроде:
SELECT store_id, order_number, order_datetime, products_ordered, order_time,
(SELECT COUNT(*) FROM mtable WHERE store_id=o.store_id AND order_time BETWEEN (o.order_time - interval '1 hour') AND o.order_time) as prev_num_orders,
(SELECT AVG(products_ordered) FROM mtable WHERE store_id=o.store_id AND order_time BETWEEN (o.order_time - interval '1 hour') AND o.order_time) as prev_avg_orders
FROM mtable o;
Производительность на этом ужасна. Одна из основных причин, вероятно, заключается в том, что мне приходится дважды просматривать заказы предыдущих часов, чтобы получить две разные характеристики. Есть ли способ оптимизировать это? Я думаю, что должна быть функция окна, но я не уверен.