我正在尝试将查询从SQL迁移到Netezza。原始包含一个自定义函数,我已将其作为存储过程进行了复制,但现在我被卡住,试图将其应用到每行。自定义函数在原始代码中使用CROSS APPLY进行调用。Netezza相当于CROSS APPLY
存储过程需要3个参数(两个来自正在应用的行)并返回单个日期。我需要每个行的日期来填充最终查询结果中的列。
我正在尝试将查询从SQL迁移到Netezza。原始包含一个自定义函数,我已将其作为存储过程进行了复制,但现在我被卡住,试图将其应用到每行。自定义函数在原始代码中使用CROSS APPLY进行调用。Netezza相当于CROSS APPLY
存储过程需要3个参数(两个来自正在应用的行)并返回单个日期。我需要每个行的日期来填充最终查询结果中的列。
不幸的是Netezza不支持CROSS APPLY或OUTER APPLY(相关子查询)。也许你可以找到一种方法来解决这个问题,而不使用这些?
我想你需要稍微改变一下你的'编码风格'来完成这个工作,但是我期望的性能会比你想象的要好。
如果您最初的功能是类似的信息(伪代码)
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')
)
你应该返回所有的“最新采购”的日期为所有的客户 - 也许在一个临时表。然后,您可以将结果集加入您的“传入”记录中。
我不认为存储过程会在这里工作,因为它不能像另一个查询中的表函数那样调用。如果您可以提供原始源代码和数据样本的具体示例,或许我们可以为您提供帮助。 – ScottMcG
谢谢,这几乎是我需要知道的。现在放弃SP路径:) – Karnage