Я пытаюсь ускорить запрос, ограничивая размер первой таблицы перед тем, как присоединиться к ней.
Исходный код, который кажется слишком длинным для запуска
SELECT
f.store_id,
f.promotion_sku,
dt.calendar_month_end,
SUM(redemption_voucher_count),
SUM(redemption_voucher_value),
SUM(redemption_customer_is_new),
pt.promotion_super_type
FROM
(((vouchers.redemptions f
INNER JOIN retail.stores rs ON f.store_id = rs.store_id)
INNER JOIN vouchers.promotions p ON p.promotion_sku = f.promotion_sku
AND p.country_id = rs.country_id)
INNER JOIN vouchers.promotion_types pt ON pt.promotion_type_id = p.promotion_type_id),
retail_analysis.date_d dt
WHERE
f.date_id >= 20181201
AND f.date_id <= 20190131
AND TRUE
AND redemption_date = dt.date_full
AND f.store_id IS NOT NULL
AND f.promotion_sku IS NOT NULL
GROUP BY f.store_id , f.promotion_sku , dt.calendar_month_end , pt.promotion_super_type
Я пытался ограничить дату, прежде чем я присоединюсь к ниже, но я получаю vouchers.f таблицы не существует. Возможно ли то, что я делаю?
SELECT
f.store_id,
f.promotion_sku,
dt.calendar_month_end,
SUM(redemption_voucher_count),
SUM(redemption_voucher_value),
SUM(redemption_customer_is_new),
pt.promotion_super_type
FROM
(SELECT * FROM vouchers.redemptions x WHERE x.date_id >= 20181201 AND x.date_id <= 20190131) AS f,
(((f INNER JOIN retail.stores rs ON f.store_id = rs.store_id
INNER JOIN vouchers.promotions p ON p.promotion_sku = f.promotion_sku
AND p.country_id = rs.country_id
INNER JOIN vouchers.promotion_types pt ON pt.promotion_type_id = p.promotion_type_id))),
retail_analysis.date_d dt
WHERE
TRUE
AND redemption_date = dt.date_full
AND f.store_id IS NOT NULL
AND f.promotion_sku IS NOT NULL
GROUP BY f.store_id , f.promotion_sku , dt.calendar_month_end , pt.promotion_super_type