2017-07-25 4 views
0

製品価格が変更されているリスト価格表と、製品が販売された日付のエントリがある別の表Product表どのような価格で。 その日以前の価格(販売時)を比較し、その価格を販売価格とともに商品表に入れたいと考えています。オラクル - リスト表から最新の定価を取得して別の製品表を追加

表のように:

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テーブル:

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

私はその上の列とリストの価格をAS_OF_DATEに最も近い日付 を使用して、私のProductテーブルに列(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; 

オラクルで行う方法をお勧めします。

+0

ビジネスで決めた価格を保存する方が良いとは思いませんか? –

答えて

0

アカウントにvalidto日付を取るしたくない場合は、単に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; 

を使用しています。 。 。

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

もう1つのこと、なぜmax(lp.price)を使用しているのですか、私は日付に最も近い最近の記録価格を望み、max(price)ではなく、あなたが説明してください。 –

+0

@LoveTyagi。 。 。それは 'keep'の構文です。 'order by'が一意のキーを持っているなら、それを心配する必要はありません。 1つの価格だけが必要な場合は、2番目のバージョンを使用します。あなたのリスト価格テーブルは、時間が重複する可能性があります。 –

関連する問題