oracle 如何在两个相似的表中获取最新数据

bwitn5fc  于 2022-12-22  发布在  Oracle
关注(0)|答案(1)|浏览(187)

我有2个表,列相同,一个是供应商注册,另一个是**“供应商更新”**表。如果供应商注册中有任何更改,则在供应商更新中创建一行。我需要数据,如如果供应商更新中没有数据,则需要显示供应商注册数据,如果供应商更新中有数据,则需要显示A和B表的最新数据。有链接,如(A.id=B.Vid)
预先致谢
我尝试了每一种可能的方法,我没有得到
enter image description here

f0brbegy

f0brbegy1#

我只需要显示最新数据(如果在B中可用),我需要显示B,否则显示A
使用UNION ALL连接表(每个表都有一个优先级),然后使用ROW_NUMBER分析函数查找每个id的第一优先级和最新日期:

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER (PARTITION BY id ORDER BY priority, date_column DESC) AS rn
  FROM   (
    SELECT b.id,
           b.date_column,
           b.column1,
           b.column2,
           1 AS priority
    FROM   b
    UNION ALL
    SELECT a.id,
           a.date_column,
           a.column1,
           a.column2,
           2 AS priority
    FROM   a
  ) t
)
WHERE  rn = 1;

或者,对于您的数据:

SELECT *
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER (PARTITION BY vendorid ORDER BY priority, record_no DESC)
           AS rn
  FROM   (
    SELECT u.*,
           1 AS priority
    FROM   vendor_update u
    UNION ALL
    SELECT r.*,
           2 AS priority
    FROM   vendor_registration r
  ) t
)
WHERE  rn = 1;

相关问题