2012-07-22 128 views
0

我在查詢MySQL。說我有3個表和想象中的數據是這樣的:在日期範圍內加入MySQL

apples_sold 
+--------+------------+----------+------+ 
| tranID | date  | apple_id | sold | 
+--------+------------+----------+------+ 
| 101 | 2012-07-01 |  a01 | 2 | 
| 102 | 2012-07-02 |  a01 | 5 | 
| 103 | 2012-07-03 |  a01 | 1 | 
| 104 | 2012-07-04 |  a01 | 0 | 
| 105 | 2012-07-05 |  a01 | 2 | 
+--------+------------+----------+------+ 

price_history 
+---------+------------+----------+-------+ 
| priceID | date  | apple_id | price | 
+---------+------------+----------+-------+ 
|  p01 | 2012-07-01 |  a01 | $0.25 | 
|  p02 | 2012-07-03 |  a01 | $0.10 | <- price change 
+---------+------------+----------+-------+ 

apple_name 
+----------+----------+ 
| apple_id | name  | 
+----------+----------+ 
|  a01 | McIntosh | 
+----------+----------+ 

試圖創建輸出這樣的查詢:

apple_prices 
+------------+----------+-------+ 
| date  | name  | price | 
+------------+----------+-------+ 
| 2012-07-01 | McIntosh | $0.25 | 
| 2012-07-02 | McIntosh | $0.25 | 
| 2012-07-03 | McIntosh | $0.10 | <- price change 
| 2012-07-04 | McIntosh | $0.10 | 
| 2012-07-05 | McIntosh | $0.10 | 
+------------+----------+-------+ 

沒有希望的價格存儲與apples_sold記錄,正常化和所有。問題在於我不能確定將銷售記錄與價格結合的最佳方式。

+0

加入與apple_id – 2012-07-22 00:05:29

+0

3個表,你可以在priceID存儲在apples_sold表,然後加入就可以了 – Vatev 2012-07-22 00:14:51

+0

你可以改變你的數據結構?您的價格歷史記錄表格是緩慢變化維度的示例。當每條記錄上都有生效日期和結束日期時,查詢更容易。 – 2012-07-22 17:07:53

回答

5

您可以使用:

SELECT a.date, d.name, c.price 
FROM apples_sold a 
INNER JOIN 
(
    SELECT a.date, MAX(b.date) AS maxdate 
    FROM apples_sold a 
    INNER JOIN price_history b ON a.date >= b.date 
    GROUP BY a.date 
) b ON a.date = b.date 
INNER JOIN price_history c ON b.maxdate = c.date 
INNER JOIN apple_name d ON a.apple_id = d.apple_id 

SQLFiddle Demo