2012-04-02 70 views
1

我有兩個表具有以下(簡化的)結構:其中保存關於所購商品因素數據和查找起始日期,結束日期從重寫StartDates

  1. 表「因素」具有這些欄:

    FactorSerial,而purchaseDate,PurchasedGood

  2. 表 「價格」 保持在不同的日期

    串口,GoodCode商品的價格, EvaluationDate,價格

一個價格是有效的,直到添加了新行具有相同的代碼,但不同的日期,因此更新其值

現在,我想創建一個表,增加了價格的表1根據購買日期。 因此,如果我們有:

PurchaseDate PurchasedGood 
----------------------------- 
    05/20/2011  A111 

和:

GoodCode EvaluationDate Price 
-------------------------------- 
    A111  02/01/2011  100 
... 
    A111  04/01/2011  110 
... 
    A111  06/01/2011  120 

結果將是

PurchaseDate PurchasedGood Price 
----------------------------------- 
    05/20/2011  A111   110 

首選的方法是創建視圖Prices1作爲

Serial GoodCode StartDate EndDate Price 

,然後加入因素與此視圖由

PurchasedDate between StartDate AND EndDate 

任何人都可以告訴我如何創建view1(或獲得最終結果與任何其他方法)?提前致謝!

P.S.對不起,我的英語不好!

+4

您正在使用哪種RDBMS(SQLServer,Oracle,MySQL等)? – 2012-04-02 11:56:21

回答

0

我想創建一個表格,根據購買日期將價格添加到表格1。

這是一個查詢,返回這樣的數據。我相信這個語法是非常標準的SQL,但是這是在SQL Server上測試的(看起來你可能會使用PostgreSQL和你的「串行」命名)。

select a.FactorSerial, a.PurchasedGood, a.PurchaseDate 
    , (select max(Price) from Prices where GoodCode = a.PurchasedGood and EvaluationDate = a.EvaluationDate) as Price 
from (
    select f.FactorSerial, f.PurchasedGood, f.PurchaseDate, max(p.EvaluationDate) as EvaluationDate 
    from Factors as f 
     join Prices as p on f.PurchasedGood = p.GoodCode 
    where f.PurchaseDate >= p.EvaluationDate 
    group by f.FactorSerial, f.PurchasedGood, f.PurchaseDate 
) as a 

此查詢假定在價格存在之前沒有購買。

此外,考慮:

優選的方法是創建視圖Prices1作爲

Serial GoodCode StartDate EndDate Price 

,然後通過

PurchasedDate between StartDate AND EndDate 

between與該視圖接合因素是包括端值。使用您描述的這種方法,如果PurchaseDate位於一行的EndDate和另一行的StartDate上,則會得到重複。

相關問題