汇总 sql 中列值的日期

Rolling up on a date for a column value in sql

我有一个 table FRUIT_PRICE 每天维护水果价格。

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日无价等

我还有一个tableFRUIT_QTY每天都保持一定数量的水果。

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
-----------------------------------------------------

我想计算给定日期的 TOTAL_COST(即 Price * Qty)。

我在下面写了相同的查询:

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' 

这显然会忽略 Price 在给定的 Date 上不可用的水果。

我如何修改上述查询中两个 table 之间的内部连接,这样如果对于 Date Price 对于 Fruit 不可用,那么应该检查之前的 Date 并在可用的情况下采用 Price。如果 Price 在前一个 Date 上不可用,则应检查前一个 Date 之前的 Date,如果可用,则采用 Price

我想从给定 Date 开始的 30 天内继续检查价格。只有当 Price 在过去 30 Dates.

中不可用时,才应忽略 Fruit

我修改了上面的查询如下,但后来卡住了:

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' 

上面的子查询如何获取 Fruit 从给定日期开始并滚动最多 30 天直到找到 Price 的第一个可用价格?

感谢阅读!

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

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  )