Oracle - 从列表中获取最新的定价并将其附加到另一个产品表中

时间:2017-07-25 16:11:28

标签: sql oracle

我有一个清单价格表,其中产品价格不断变化,另一个表产品表,其中包含产品销售日期和价格的条目。 我想在该日期或之前(销售时)比较产品的价格,并将该清单价格与销售价格一起放在我的产品表中。

表格如下:

list price , Valid from ,valid to product  
23  , jul 7 , july 15, X   
24 , jul 20 , july 30,X   
25 , aug 5 , aug 30,X   
20,sep 5,sep 26,X

产品表:

Product , Selling price , As of date  
X , 24 , jul 10  
X,39, jul 30  
x,40, aug 28

我希望使用最接近的日期将列(ListPrice)附加到我的Product表 到价格表中该日期的AS_OF_DATE列和清单价格。

select Product.*, price.list_price from 
(select '2017-07-20 12:00:00'::timestamp as 
valid_from,select '2017-07-20 12:00:00'::timestamp as valid_from) price  
left join (select '2017-07-20 12:15:00'::timestamp as ts, true as val 
)product on product.ts >= price.valid_from and b.ts < price.valid_to;  

请建议在oracle中进行此操作的方法。

1 个答案:

答案 0 :(得分:0)

只需使用join

即可
select p.*, lp.*
from products p left join
     listprices lp
     on p.product = lp.product and
        p.asofdate >= lp.validfrom and
        p.asofdate <= lp.validto;

如果您不想考虑validto日期。 。

select p.*,
       (select max(lp.price) keep (dense_rank first order by lp.validfrom desc)
        from listprices lp
        where p.product = lp.product and
              p.asofdate >= lp.validfrom
      ) as listprice
from products p ;