0

MySQLにクエリを実行しようとしています。3 つのテーブルがあり、データが次のようになっているとします。

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 レコード、正規化などで価格を保存したくありませんでした。問題は、販売されたレコードと価格を結合する最善の方法がわからないことです.

4

1 に答える 1

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

于 2012-07-22T01:30:23.847 に答える