Sql Oracle Update语句工作不正常 我想考虑字段值OID和EXID的每一个组合,取Min RestestObjultIddate日期,并在FixStIdPosixIddate中更新相同的值。

Sql Oracle Update语句工作不正常 我想考虑字段值OID和EXID的每一个组合,取Min RestestObjultIddate日期,并在FixStIdPosixIddate中更新相同的值。,sql,oracle,date,sql-update,Sql,Oracle,Date,Sql Update,我有很多冗余行,它们是字段值OID和EXID的组合。但为所有这些值设置最小最新修改日期应该不会有问题 我尝试了以下查询,但其工作不正常: update O_TEST t set FIRST_INSERTION_DATE = (select min (LATEST_MODIFICATION_DATE) from O_TEST) where rowid < ( select max(rowid) from OBS_ORDER_ID_MAPPING_TEST t2 where t.E

我有很多冗余行,它们是字段值OID和EXID的组合。但为所有这些值设置最小最新修改日期应该不会有问题

我尝试了以下查询,但其工作不正常:

update O_TEST t
set FIRST_INSERTION_DATE = (select min (LATEST_MODIFICATION_DATE) from O_TEST)
where rowid < (
  select max(rowid)
  from OBS_ORDER_ID_MAPPING_TEST t2
  where t.EXID = t2.EXID
    and t.OID = t2.OID
  );

您需要集合的相关子查询:

t2.OID=t.OID 其中最新修改日期选择mint2.最新修改日期 来自O_测试t2 其中t2.EXID=t.EXID或t2.EXID为null,t.EXID为null,且 t2.OID=t.OID ;


从你的注释OID不是空的,但是如果是这样,你也可以使用类似的逻辑。

它工作得很好,但是我也有EXID,对于OID来说,它是NULL,在这种情况下,日期还没有被更新,我们如何考虑这些值的组合呢?
update O_TEST t
    set FIRST_INSERTION_DATE = (select min(t2.LATEST_MODIFICATION_DATE)
                                from O_TEST t2
                                where t2.EXID = t.EXID and t2.OID = t.OID
                               )
    where LATEST_MODIFICATION_DATE <> (select min(t2.LATEST_MODIFICATION_DATE)
                                       from O_TEST t2
                                       where (t2.EXID = t.EXID or t2.EXID is null and t.EXID is null) and
                                             t2.OID = t.OID
                                      );
update O_TEST t
    set FIRST_INSERTION_DATE = (select min(t2.LATEST_MODIFICATION_DATE)
                                from O_TEST t2
                                where t2.EXID = t.EXID and