Sql 如何在不更新Netezza中的max记录的情况下更新以前的记录

Sql 如何在不更新Netezza中的max记录的情况下更新以前的记录,sql,timestamp,max,netezza,Sql,Timestamp,Max,Netezza,希望有人能帮忙。我正在尝试执行更新语句。我有一个包含以下列的表: 总线号SK、总线号、效率、输入TMPSTP、输出DT 主键是BUS_NBR_SK和BUS_NBR。这里只有一张桌子 这些都是插入到表中的内容,我需要更新旧记录上的EXP_DT,并使用maxENT_tmtp保留最新记录。我只想用一组b.EXP_DT=current_timestamp进行更新,其中EXP_DT为NULL,但是这不起作用,因为最近的记录也将被分配一个过期日期 你知道怎么做吗 我尝试了以下方法,但它正在以最长生效日期更新

希望有人能帮忙。我正在尝试执行更新语句。我有一个包含以下列的表: 总线号SK、总线号、效率、输入TMPSTP、输出DT

主键是BUS_NBR_SK和BUS_NBR。这里只有一张桌子

这些都是插入到表中的内容,我需要更新旧记录上的EXP_DT,并使用maxENT_tmtp保留最新记录。我只想用一组b.EXP_DT=current_timestamp进行更新,其中EXP_DT为NULL,但是这不起作用,因为最近的记录也将被分配一个过期日期

你知道怎么做吗

我尝试了以下方法,但它正在以最长生效日期更新所有内容

UPDATE TABLE b
SET b.EXP_DT = (SELECT MAX(a.EFF_DT)
FROM TABLE A
INNER JOIN TABLE B
ON A.BUS_NBR_SK = B.BUS_NBR_SK
AND A.ENT_TMSTP = B.ENT_TMSTP
AND A.BUS_NBR = B.BUS_NBR)
WHERE EXP_DT IS NULL
and ENT_TMSTP != (select max(c.ENT_TMSTP)
from table C)
非常感谢你


我不确定这是否能解决您的问题,但使用相关子查询至少能使设置逻辑正确:

UPDATE table b
    SET b.EXP_DT = (SELECT MAX(a.EFF_DT)
                    FROM TABLE A
                    WHERE A.BUS_NBR_SK = B.BUS_NBR_SK AND
                          A.ENT_TMSTP = B.ENT_TMSTP AND
                          A.BUS_NBR = B.BUS_NBR
                   )
    WHERE b.EXP_DT IS NULL AND
          b.ENT_TMSTP <> (SELECT MAX(c.ENT_TMSTP) FROM table C);

但是,我不确定这是否解决了您的整体问题。

如果您想用a.EFF\u DT的日期更新b.EXP\u DT,以获得BUS\u NBR\u SK、ENT\u tmtp和BUS\u NBR特定键的最新记录,您可以为a创建一个按视图分组,或者在更新查询中声明它,如下所示:

更新表b 设置b.EXP\u DT=A\u Group.Max\u EFF 从表A内部联接 选择BUS_NBR_SK、ENT_TMSTP、BUS_NBR、MAXA.EFF作为Max_EFF 从B 按总线NBR SK、ENT TMSTP、总线NBR分组作为网络上的一个组 A_Group.BUS_NBR_SK=b.BUS_NBR_SK和 A_Group.ENT_tmtp=b.ENT_tmtp和 A组总线NBR=b组总线NBR 其中b.EXP_DT为NULL,且 b、 ENT_TMSTP A_Group.Max_EFF

希望能有帮助。
Sergio

编辑您的问题,并用您正在使用的数据库标记它。非常感谢您的及时回复。我似乎遇到了语法错误:^found table at char 81应使用“或”,我想我只想按此方法将exp_日期设置为当前时间戳,如下所示:更新table b set b.exp_DT=当前时间戳,并避免更新最新记录。我在尝试执行此操作时不断出错。@RoxanneLuick。对表的引用位于原始查询中。它不是SQL语法的一部分。表名应该跟在FROM后面,后面是别名。我修改了此项,并收到一个新错误:FROM中的sub SELECT必须有别名。我以前很少在子查询中使用更新。这是我修改过的脚本:更新表b SET b.EXP\u DT=SELECT BUS\u NBR\u SK、BUS\u NBR中的当前时间戳,max ENT_tmtp为表a中的max_ENT_tmtp,其中a.BUS_NBR_SK=b.BUS_NBR_SK和a.BUS_NBR=b.BUS_NBR组,按总线卡增强属性、总线实体(其中b.EXP_DT为空)和ENT_tmtp max_SK_TMSTP@RoxanneLuick . . . 此答案没有两级子查询。我对此进行了修改,并收到一个新错误:从中选择的子项必须具有别名。我以前很少在子查询中使用更新。