在sql中滚动列值的日期

在sql中滚动列值的日期,sql,db2,Sql,Db2,我有一个水果价格表,它每天都保持水果的价格 Date | Fruit | Price ----------------------------------------------------- 2015-06-04 Banana 10 2015-06-04 Apple 20 2015-06-04 Orange 15 2015-0

我有一个水果价格表,它每天都保持水果的价格

Date          |    Fruit         |    Price
-----------------------------------------------------
2015-06-04         Banana             10
2015-06-04         Apple              20
2015-06-04         Orange             15 
2015-06-03         Orange             18
2015-06-03         Banana             9
2015-06-02         Banana             11
2015-06-02         Orange             16
2015-06-02         Apple              22
2015-06-02         Papaya             40
-----------------------------------------------------
完全有可能在某些天,某些水果的价格没有被填充。例如,木瓜价格在6月3日和4日不可用,苹果价格在6月3日不可用,等等

我有另一个表
水果数量
,它每天维护水果的数量

Date          |    Fruit         |    QTY
-----------------------------------------------------
2015-06-04         Banana             100
2015-06-04         Apple              50
2015-06-04         Orange             150 
2015-06-04         Papaya             200 
2015-06-03         Orange             50
2015-06-03         Banana             100
2015-06-03         Apple              150
2015-06-03         Papaya             100 
2015-06-02         Banana             200
2015-06-02         Orange             150
2015-06-02         Apple              50
2015-06-02         Papaya             200
-----------------------------------------------------
我想计算给定日期的
总成本
(即
价格*数量

我在下面写下了同样的问题:

SELECT 
   A.DATE, A.FRUIT, (B.PRICE*A.QTY) AS TOTAL_COST 
FROM 
   FRUIT_QTY A INNER JOIN FRUIT_PRICE B ON A.FRUIT = B.FRUIT AND A.DATE = B.DATE 
  WHERE
     A.DATE = '2015-06-04' 
这显然会忽略在给定的
日期
没有
价格
的水果

如何修改上述查询中两个表之间的内部联接,以便如果
日期
水果
价格
不可用,则应检查前一个
日期
,如果可用,则取
价格
。如果
价格
在上一个
日期
不可用,则应检查上一个
日期
之前的
日期
,如果可用,则取
价格

我想从给定的
日期起30天内继续检查价格<代码>水果
只有在过去30个
日期
价格
不可用时才应忽略

我修改了上面的查询,如下所示,但是我被卡住了:

SELECT 
   A.DATE, A.FRUIT, (B.PRICE*A.QTY) AS TOTAL_COST 
FROM 
   FRUIT_QTY A 
       INNER JOIN 
   (sub query here to get first available price in last 30 days 
     starting from given date in where condition) as B ON  A.FRUIT = B.FRUIT 
  WHERE
     A.DATE = '2015-06-04' 
上面的子查询将如何获取从给定日期开始的
水果
的第一个可用价格,并滚动到30天,直到找到
价格


谢谢你的阅读

在日期范围内查找所需行的子查询:

B.Date = 
   ( SELECT MAX(C.Date)
     FROM FRUIT_PRICE AS C
     WHERE C.Date BETWEEN A.Date - 30 DAY AND A.Date
     AND A.Fruit = C.Fruit  )

@投反对票的人:请解释投反对票的原因!请注意,我假设在某些情况下,您也不会得到更新的水果数量。。。另外,DB2的平台和版本是什么?