sql - 合并三个表并在 oracle 中显示它们的状态(仅共享字段的最近条目)
问题描述
我有三个要合并的表。为此,我写了一个查询,但问题是我已经部分实现了我的目标。我想制作一个填充状态的表格!为此,我需要 SEC_OBJECTS_FILLING 表中的数据保持不变,而其他表中的数据必须是最新的!
我对脚本(https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=72de71f849e103d3462137248f90e60a)进行了建模,我在那里得到了结果。但我想要这样的结果。
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我没有密封!)希望你明白。
我会很感激你的帮助
解决方案
以下查询是否满足您的目标 -
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;
这是演示。
推荐阅读
- intellij-idea - 如何在 IntellijIdea 中不断弹出“构建”选项卡中的“同步”窗格
- javascript - 向样式化组件添加流类型检查
- c# - 我的任务列表只运行两次,而它应该运行多次
- php - 高级用户的油门路线
- deep-learning - 如何在 Colab TPU 上释放磁盘空间?
- python-3.x - 如何在使用 tkinter python 时获取子程序之间传递的信息
- php - 为什么我的 Web 服务响应返回的数据首字母小写?
- powershell - Powershell脚本在没有特定过程的情况下注销用户
- c# - 将 nvarchar 数据类型转换为 smalldatetime 数据类型导致值超出范围
- c# - 如何将assetbundle下载到IOS/Android的app文件夹中并从中获取所需的模型?