Oracle Update语句无法正常工作

西蒙兹

我想考虑字段值的每种组合,OIDEXID采用最小值LATEST_MODIFICATION_DATE并更新FIRST_INSERTION_DATE

我有很多多余的行与字段值OID的组合EXID但是LATEST_MODIFICATION_DATE为所有这些值设置最小日期应该不是问题

我尝试了以下查询,但无法正常工作:

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
  );
戈登·利诺夫

您需要一个相关的子查询set

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
                                      );

要处理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)其中LATEST_MODIFICATION_DATE <>(从O_TEST t2选择min(t2.LATEST_MODIFICATION_DATE)其中(t2.EXID = t.EXID或t2.EXID为null且t.EXID为null)和t2.OID = t.OID);

从您的评论来看OID不是NULL,但是如果是这样,您也可以使用类似的逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章