Я пытаюсь преобразовать подзапрос SELECT в оператор JOIN, поэтому он работает на Netezza. Я изначально работал над базой данных Oracle, где следующий запрос работал нормально, но Netezza не поддерживает подзапросы в операторах SELECT. Мне удалось получить подзапрос SELECT в оператор ON, но Netezza также не поддерживает это.JOIN Альтернатива SELECT подзапросам
Мой запрос пытается найти ежедневный доход от продаж отдельных продуктов, просматривая ежедневное количество проданных и историческую цену за эту дату.
Любые предложения о том, как разложить это утверждение на что-то, что примет Netezza? Мне также интересно узнать, может ли какая-либо реструктуризация моего запроса повысить эффективность.
Мой оригинальный Oracle SQL-запрос:
Select
SALES.DATE,
SALES.PRODUCT,
SALES.QUANTITY,
(
Select PRICE
from
(
Select PRODUCT_ID, PRICE, max(EFF_DATE) as EFF_DATE
from HIST_PRICING
Where
PRODUCT_ID = SALES.PRODUCT and
SALES.DATE > EFF_DATE
GROUP BY
PRODUCT_ID, PRICE
)
) as PRICE,
(SALES.QUANTITY * PRICE) as REVENUE
FROM SALES_RECORDS SALES
;
Переехал подзапрос ВСТУПИТЬ НА высказыванием:
SELECT
SALES.DATE,
SALES.PRODUCT,
SALES.QUANTITY,
H.PRICE,
(SALES.QUANTITY * H.PRICE) as REVENUE
FROM SALES_RECORDS SALES
LEFT JOIN HIST_PRICING H ON
SALES.PRODUCT = H.PRODUCT and
SALES.DATE =
(
Select MAX(EFF_DATE) AS MOST_RECENT
FROM HIST_PRICING
WHERE SALES.PRODUCT = HIST_PRICING.PRODUCT
AND EFF_DATE <= SALES.DATE
GROUP BY SALES.PRODUCT
)
Для справки, здесь приведен упрощенный пример того, что выглядит мои данные таблицы как.
╔═════════════════════════════════════╗
║ SALES_RECORDS ║
╠═══════════╦═════════╦═══════════════╣
║ DATE ║ PRODUCT ║ QUANTITY_SOLD ║
╠═══════════╬═════════╬═══════════════╣
║ 1/1/2015 ║ SHOES ║ 500 ║
║ 2/5/2015 ║ SHOES ║ 1200 ║
║ 3/7/2015 ║ TOYS ║ 600 ║
║ 3/9/2015 ║ SHOES ║ 100 ║
║ 5/10/2015 ║ HATS ║ 400 ║
╚═══════════╩═════════╩═══════════════╝
╔══════════════════════════════╗
║ HIST_PRICING ║
╠═══════════╦═════════╦════════╣
║ EFF_DATE ║ PRODUCT ║ PRICE ║
╠═══════════╬═════════╬════════╣
║ 1/1/2015 ║ SHOES ║ $50 ║
║ 1/1/2015 ║ TOYS ║ $10 ║
║ 1/1/2015 ║ HATS ║ $20 ║
║ 2/15/2015 ║ SHOES ║ $45 ║
║ 2/15/2015 ║ HATS ║ $15 ║
║ 3/1/2015 ║ HATS ║ $20 ║
║ 5/1/2015 ║ TOYS ║ $15 ║
║ 8/1/2015 ║ SHOES ║ $55 ║
╚═══════════╩═════════╩════════╝
Я не уверен, что вам нужно использовать 'LEFT JOIN'. У вас все ваши продукты существуют на столе 'HIST_PRICING'? Кроме того, вам не нужно группироваться в вашем подзапросе. –