如何在 NETEZZA 中实现 CROSS APPLY?

Posted

技术标签:

【中文标题】如何在 NETEZZA 中实现 CROSS APPLY?【英文标题】:How to achieve CROSS APPLY in NETEZZA? 【发布时间】:2018-01-09 02:36:29 【问题描述】:

我想分享我们如何在不使用 CROSS APPLY 的情况下实现功能。[适用于 NETEZZA SQL]。

以下查询使用交叉申请来检索每周 FOF 的最后 52 周:

SELECT      t1.col, 
            t3.col          AS col_last52wks
FROM        TABLE1 t1
            CROSS APPLY (
                          SELECT TOP 52 t2.col
                          FROM  TABLE2 t2
                          WHERE t2.col <= t1.col
                          ORDER BY t2.col DESC
                ) t3
--Last 13 Weeks Condition
WHERE t1.col >= minvalue -- RANDOM
AND   t1.col <= maxvalue-- RANDOM

我们可以通过在上面的代码中进行以下修改来实现这一点,并去掉CROSS APPLY

SELECT  t1.col,
        t2.col             AS col_last52wks
FROM    TABLE1 t1
        INNER JOIN TABLE2 t2
                ON t2.sequencecol BETWEEN (t1.sequencecol - 51) AND t1.sequencecol
WHERE t1.col >= minvalue
AND   t1.col <= maxvalue

【问题讨论】:

Cross Apply 将从 t2 返回前 10 个 tradyrwkcode,对于来自 t1 的每个 tradyrwkcode。但是Cross Join 将只返回 10 条记录,无论有多少 tradyrwkcode 存在 如果我说 CROSS APPLY 的工作方式类似于 INNER JOIN 会错吗? 有点,但它们有自己的用途。外部表引用可以在 CROSS APPLY 子选择中引用,但在 Inner join 中您不能这样做。 这是唯一的区别还是还有其他区别? 还存在许多其他差异。谷歌它.. 【参考方案1】:

我在这种情况下使用 CROSS APPLY:

当我 split 将一列数据分成多行并对该拆分后的数据进行“连接”时

一般的陈述如下

FROM Table1
CROSS APPLY dbo.UDF_TableFunctionName(Table1Column) as t

因此,如果您将字符串值传递给表函数,则可以简单地将其用作

select * from dbo.UDF_TableFunctionName(@strVariable)

但是如果你想在一个行集而不是单个值上使用这个函数,那么你使用 CROSS APPLY

CROSS APPLY 如果您想为行列返回多于 1 列,则很有用 例如,在这个table valued function 中,我将日期列解析为其日期部分并显示在同一行中

select
 o.SalesOrderID, o.OrderDate,
 d.[year], d.[month], d.[day]
from Sales.SalesOrderHeader o
cross apply dbo.udf_ParseDate(o.OrderDate) d

并且在 CROSS APPLY 上,您不使用 ON 之后的连接条件 您只需将列作为输入参数传递给表值函数

CROSS JOIN 只是两个表的笛卡尔坐标。 我们曾经在没有“CROSS JOIN”的情况下对其进行编码,如下所示

FROM TableA, TableB

【讨论】:

以上是关于如何在 NETEZZA 中实现 CROSS APPLY?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 python 中实现 cross_validation

如何在 keras 中实现 ssim 的损失函数?

如何在 Spark 中实现“交叉连接”?

如何在mvc中实现对图像的点击绑定

如何在 Xamarin Forms App 中实现 SSO?

如何在 Flutter 中实现 App Tracking Transparency