在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的平台和版本是什么?