2017-07-25 32 views
0

我有一個列表價格表,其中產品價格不斷變化,另一個表格產品表格中包含輸入產品日期的日期和以什麼價格。 我想比較該日期或之前產品的價格(當它被賣出時),並將該清單價格與售價一起放入我的產品表中。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 

我希望用最接近日期 到AS_OF_DATE該列和標價一列(ListPrice)追加到我的產品表日期在價格表中。

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中使用它的方式。

+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 ; 
+0

感謝您的回覆,但奇怪的是我有更多的方式記錄我左表中的內容,但是,我只是想要記錄等於左表。 –

+0

還有一件事,爲什麼你使用max(lp.price),我想要最近的記錄價格是最接近的日期,而不是最大(價格),請你解釋一下。 –

+0

@LoveTyagi。 。 。這是'keep'的語法。如果'order by'有唯一的鍵,那麼你不必擔心它。如果你只想要一個價格,那麼使用第二個版本。您的清單價格表可能有時間上的重疊。 –

相關問題