Netezza - 使用另一个表中的最大数据更新一个表

问题描述

我在 netezza 中有一张需要更新的表。我正在使用的列是

表A

  • ID_NO
  • ENTRY_DATE
  • 价格

表 B

  • ID_NO
  • 开始日期
  • END_DATE
  • 价格

因此数据示例如下所示:

表A

ID_NO ENTRY_DATE 价格
123 2020-05-01
123 2020-08-15

表 B

ID_NO START_DATE END_DATE 价格
123 2019-01-01 2019-11-01 7.64 美元
123 2020-04-30 2020-05-02 $6.19
123 2020-04-15 2020-08-30 $2.19

我需要将表 A 中的价格更新为表 B 中的最高价格,其中 a.ENTRY_DATE 介于 b.START_DATE 和 b.END_DATE 之间。所以决赛桌应该是这样的:

表A

ID_NO ENTRY_DATE 价格
123 2020-05-01 $6.19
123 2020-08-15 $2.19

这是我到目前为止所拥有的,但它最终只是采用适合任一行的最高价格,而不是对每一行进行计算:

update TABLE_A
set PRICE=(select max(b.PRICE) 
            from TABLE_B b
            inner join TABLE_A a on a.ID_NO=b.ID_NO
            where a.ENTRY_DATE between b.START_DATE and b.END_DATE)

解决方法

我无法访问 Netezza,但通常的格式是使用相关子查询。

也就是说,不是在查询中再次包含 viewer.dart,而是引用外部引用 TABLE_A...

TABLE_A

通过这种方式,相关子查询基本上为 update TABLE_A set PRICE = ( select max(b.PRICE) from TABLE_B b where TABLE_A.ID_NO = b.ID_NO and TABLE_A.ENTRY_DATE between b.START_DATE and b.END_DATE ) 中的每一行调用一次,并且该调用使用 TABLE_A 中的当前行作为其参数。


另一种可能是...

TABLE_A