我在MySQL数据库中有两个表
表1说明了包含字段(id, name)
的table1
记录例如
###############
id | name
1 | Chair
2 | Table
3 | Bed
###############
和表2将table2表示为字段(id, table1_id, date, price)
##############################
id |table1_id| date | price
1 | 1 | 2013-09-09 | 500
2 | 1 | 2013-08-09 | 300
3 | 2 | 2013-09-09 | 5100
4 | 2 | 2013-08-09 | 5000
5 | 3 | 2013-09-09 | 10500
################################
我想要实现的是从表2中检索所有物品的最新价格
SQL的结果应该是
##############################
id |table1_id| date | price
1 | 1 | 2013-09-09 | 500
3 | 2 | 2013-09-09 | 5100
5 | 3 | 2013-09-09 | 10500
################################
我可以按查询
对它们进行排序SELECT * FROM table2 GROUP BY table1_id ORDER BY date DESC
但似乎GROUP BY在ORDER BY子句之前运行,因此结果不是必需的 在此先感谢
答案 0 :(得分:3)
您可以使用子查询限制ON
子句中的连接条目,因此,只会加入最新的条目:
SELECT t2.id, t1.id, t1.name, t2.date, t2.price
FROM table1 t1 JOIN table2 t2
ON (t1.id = t2.table1_id
AND t2.id = (
SELECT id
FROM table2
WHERE table1_id = t1.id
ORDER BY table2.date DESC
LIMIT 1
));
结果:
|1|1|Chair|2013-09-09| 500|
----------------------------
|3|2|Table|2013-09-09| 5100|
----------------------------
|5|3| Bed|2013-09-09|10500|
答案 1 :(得分:1)
您可以使用子查询,如下所示:
SELECT
table2.id,
dates_table.max_date,
dates_table.table1_id,
table2.price
FROM
(SELECT
MAX(`date`) AS max_date,
table1_id
FROM
table2
GROUP BY
table1_id) AS dates_table
LEFT JOIN
table2 ON dates_table.`max_date`=table2.`date`