我有一张表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日没有苹果价格等等。
我有另一张表FRUIT_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
不可用的结果。
如何在上述查询中修改两个表之间的内部联接,以便如果Date
的{{1}} Price
不可用,那么之前的Fruit
应该检查并Date
如果可用的话。如果Price
上的Price
不可用,则应检查上一个Date
之前的Date
,如果可用则Date
。
我想继续检查给定Price
的30天的价格。仅当Date
在过去30 Fruit
内不可用时,才应忽略Price
。
我修改了上面的查询,但是后来卡住了:
Dates
上面的子查询如何从给定日期开始获取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天?
感谢阅读!
答案 0 :(得分:0)
子查询在日期范围内找到所需的行:
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 )