ここには少しトリッキーなものがあります。SQLiteには次の3つのテーブルがあります。
車のテーブル
.------.------.--------------.---------.
| vin | year | make | model |
'------+------+--------------+---------'
| 1234 | 1965 | Aston Martin | DB5 |
| 5678 | 1965 | Ford | Mustang |
| 9012 | 1994 | Ford | Tarus |
`--------------------------------------'
価格表
.------.-------.---------------------.
| vin | price | last_modified |
'------+-------+---------------------'
| 1234 | 60000 | 2012-08-01 12:00:00 |
| 1234 | 58000 | 2012-08-02 12:00:00 |
| 1234 | 56000 | 2012-08-10 12:00:00 |
| 5678 | 30000 | 2012-08-02 12:00:00 |
| 9012 | 1000 | 2012-08-01 12:00:00 |
`------------------------------------'
マイレージテーブル
.------.---------.---------------------.
| vin | mileage | last_modified |
'------+---------+---------------------'
| 1234 | 35000 | 2012-08-01 12:00:00 |
| 1234 | 35030 | 2012-08-02 12:00:00 |
| 1234 | 35100 | 2012-08-10 12:00:00 |
| 5678 | 60000 | 2012-08-02 12:00:00 |
| 9012 | 245000 | 2012-08-01 12:00:00 |
`--------------------------------------'
3つのテーブルすべてを結合して、「Cars」テーブルのすべての行を表示したいのですが、価格テーブルから最新の「last_modified」価格を1つ、マイレージテーブルから最高マイレージを1つだけ取得します。
最後に、私の結果は次のようになります。
.------.------.--------------.---------.-------.---------.
| vin | year | make | model | price | mileage |
'------+------+--------------+---------+-------+---------+
| 1234 | 1965 | Aston Martin | DB5 | 56000 | 35100 |
| 5678 | 1965 | Ford | Mustang | 30000 | 60000 |
| 9012 | 1994 | Ford | Tarus | 1000 | 245000 |
`--------------------------------------------------------'
これは、特定のVIN(つまり、「1234」)を選択した場合に行うことです。
SELECT
c.year, c.make, c.model, c.vin, p.price, m.mileage, p.last_modified
FROM
cars c
LEFT JOIN (
SELECT
price, vin, last_modified
FROM
price
WHERE
(vin = '1234')
ORDER BY
last_modified DESC LIMIT 1
) p
LEFT JOIN (
SELECT
mileage, vin, last_modified
FROM
mileage
WHERE
(vin = '1234')
ORDER BY
mileage DESC LIMIT 1
) m
WHERE
(c.vin = '1234') AND (c.vin = p.vin) AND (c.vin = m.vin)
GROUP BY
p.vin, m.vin
ORDER BY
c.vin, p.last_modified DESC, m.mileage ASC;
...しかし、「Cars」テーブルからすべての行を取得したいと思います。
誰か考えがありますか?