Netezza - 用另一个 table 的最大数据更新一个 table

Netezza - update one table with max data from another table

我在 netezza 中有一个 table 需要更新。我正在使用的专栏是

TABLE一个

TABLE B

所以数据示例如下所示:

TABLE一个

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

TABLE 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 美元

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

TABLE一个

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,但通常的格式是使用相关的子查询。

也就是说,您不再在查询中包含 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 中的当前行作为其参数。


替代方案可能是...

update
  TABLE_A
set
  PRICE = revised.PRICE
from
(
      select a.ID_NO, a.ENTRY_DATE, max(b.PRICE) AS 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
    group by a.ID_NO, a.ENTRY_DATE
)
  AS revised
where
      TABLE_A.ID_NO      = revised.ID_NO
  and TABLE_A.ENTRY_DATE = revised.ENTRY_DATE