更新/插入新数据的缺失日期范围?

时间:2015-06-04 08:36:13

标签: sql oracle plsql

下面是oracle数据库中的TableA。

item    price   start_date  end_date
xyz     256     1-Jan-15    17-Jan-15
xyz     125     16-Mar-15   31-Mar-15

以下是提供的新数据客户端。

item    price   start_date  end_date
xyz     236     5-Jan-15    10-Jan-15
xyz     253     15-Jan-15   20-Jan-15
xyz     253     25-Jan-15   2-Mar-15

现在,我需要将上述新数据与TableA数据进行比较,并填写缺少的日期范围。如果新数据有日期差距,则必须从TableA(如果存在)中获取。 最终更新的TableA必须如下所示:

item    price   start_date  end_date
xyz     256     1-Jan-15    4-Jan-15
xyz     236     5-Jan-15    10-Jan-15
xyz     256     11-Jan-15   14-Jan-15
xyz     253     15-Jan-15   20-Jan-15
xyz     253     25-Jan-15   2-Mar-15
xyz     125     3-Mar-15    31-Mar-15

这需要在oracle中使用sql / plsql来完成。 请帮忙。

似乎可以使用超前/滞后功能来实现,但不确定如何在查询中包含价格字段。像下面的一些事情

select t.ITEM, t.start_dAtE,
       lead(t.start_dAtE) over (partition by t.ITEM order by t.start_dAtE)-1 as end_dte,
       t.PRICE
from ((select ITEM, start_dAtE,end_date,PRICE
       from xxa
      ) union all
      (select ITEM, start_dAtE,end_date, PRICE
       from xxb
      )
     ) t
group by t.ITEM, t.start_dAtE,t.PRICE;

1 个答案:

答案 0 :(得分:0)

您可以从表中选择数据,然后只选择TableA中的某些内容与TableB中的相同值匹配的数据。

例如:
要选择两个表中出现的那些:

SELECT  * 
FROM    TableA TA, TableB TB
WHERE   TA.item = TB.item 
AND     TA.price = TB.price 
AND     TA.start_date = TA.start_date 
AND     TA.end_date = TA.end_date;