下面是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;
答案 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;