Netezza Эквивалент CROSS APPLY

Я пытаюсь перенести запрос с SQL на Netezza. Оригинал содержит пользовательскую функцию, которую я воспроизвел как хранимую процедуру, но теперь я застрял, пытаясь применить ее к каждой строке. Пользовательская функция вызывалась с помощью CROSS APPLY в исходном коде.

Хранимая процедура принимает 3 аргумента (два из строки, к которой она применяется) и возвращает одну дату. Мне нужна эта дата для каждой строки, чтобы заполнить столбец в окончательных результатах запроса.


person Karnage    schedule 05.10.2016    source источник
comment
Я не думаю, что хранимая процедура подойдет вам здесь, поскольку ее нельзя вызвать, как табличную функцию, в другом запросе. Если вы можете предоставить конкретный пример с оригинальным исходным кодом и образцами данных, возможно, мы сможем вам помочь.   -  person ScottMcG    schedule 07.10.2016
comment
Спасибо, это почти то, что мне нужно было знать. Отказ от пути SP сейчас :)   -  person Karnage    schedule 10.10.2016


Ответы (2)


К сожалению, Netezza не поддерживает CROSS APPLY или OUTER APPLY (коррелированные подзапросы). Может быть, вы можете найти способ решить проблему, не используя их?

person cairnz    schedule 11.10.2016

Я предполагаю, что вам нужно немного изменить свой «стиль кодирования», чтобы это заработало, но я ожидаю, что производительность будет лучше, чем вы когда-либо ожидали.

Если ваша исходная функция была чем-то вроде (псевдокод)

LatestPurchase(custumerID,channel)
(
Select max(order_date) 
from ordersq O
where customerID = O.CustID
And O.payment_date is not null 
And (O.salesChannel=Channel or Channel is null or Channel = 'ANY')
)

Вы должны вернуть ВСЕ даты «последней покупки» для всех ваших клиентов — возможно, во временной таблице. Затем вы можете присоединиться к этому набору результатов обратно в свою «входящую» запись.

person Lars G Olsen    schedule 22.10.2016