2016-10-05 4 views
0

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

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

+1

Я не думаю, что хранимая процедура будет работать для вас здесь, поскольку она не может быть вызвана как функция таблицы в другом запросе. Если вы можете предоставить конкретный пример с исходным кодом и образцами данных, мы можем вам помочь. – ScottMcG

+0

Спасибо, это в значительной степени то, что мне нужно было знать. Отказаться от пути SP сейчас :) – Karnage

ответ

0

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

0

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

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

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') 
) 

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

 Смежные вопросы

  • Нет связанных вопросов^_^