首页 > 解决方案 > 合并三个表并在 oracle 中显示它们的状态(仅共享字段的最近条目)

问题描述

我有三个要合并的表。为此,我写了一个查询,但问题是我已经部分实现了我的目标。我想制作一个填充状态的表格!为此,我需要 SEC_OBJECTS_FILLING 表中的数据保持不变,而其他表中的数据必须是最新的!

我对脚本(https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=72de71f849e10​​3d3462137248f90e60a)进行了建模,我在那里得到了结果。但我想要这样的结果。

NAME_OBJ  DATA_AREA   SEALS  DATA        NAME_UR  SEAL_NUMBER  NAME_USR  DATA_UNPLUG
--------- ----------- ------ ----------- -------- ----------- ---------- -----------
OBJ1      DATA_AREA1  Yes     2019-11-13  ADMIN    A14602631    
OBJ2      DATA_AREA2  Yes     2019-11-13  ANDRII   A14602632
OBJ3      DATA_AREA1  No      2019-11-13  ADMIN    A14602638    ADMIN     2019-11-13 
OBJ4      DATA_AREA1  No

也就是说,我只想查看我的对象的最新活动,而不是整个故事。(我密封了物体(1,2,3,)和密封的物体(1,2,3),然后又密封了物体(1,2)。对象4我没有密封!)希望你明白。

我会很感激你的帮助

标签: sqloracleoracle11g

解决方案


以下查询是否满足您的目标 -

SELECT NAME_OBJ, DATA_AREA, SEALS, DATA, NAME_UR,
       SEAL_NUMBER, NAME_USR, DATA_UNPLUG
  FROM
  (
   SELECT sof.NAME_OBJ, sof.DATA_AREA, sof.SEALS, sos.DATA, sos.NAME_UR,
          sos.SEAL_NUMBER, sou.NAME_USR, sou.DATA_UNPLUG,
          RANK() OVER (PARTITION BY sof.NAME_OBJ ORDER BY sos.SEAL_NUMBER) as rnk
     FROM SEC_OBJECTS_FILLING sof
     LEFT JOIN SEC_OBJECT_SEALING sos 
       ON sof.NAME_OBJ = sos.SEALING_OBJECT 
      AND sof.DATA_AREA = sos.DATA_AREA
     LEFT JOIN SEC_OBJECT_UNPLUG sou
       ON sou.OBJECT_UNPLUG = sos.SEALING_OBJECT 
      AND sos.DATA_AREA = sou.DATA_AREA 
      AND sou.SEAL_NUMBER = sos.SEAL_NUMBER
   )
  WHERE rnk = 1;

是演示。


推荐阅读