2012-04-02 42 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上,则会得到重复。

相关问题