LEFT JOIN到最新的一行

时间:2015-11-02 23:39:21

标签: mysql sql left-join

我正在尝试从一个表中获取数据,其中包含来自第二个表的附加数据,但在第二个表中,我有许多记录连接到第一个表中的记录,我想要最新。

在第一张表中,我保留了产品,而我第二,我保留了数据的价格。我想要以实际(最新)价格购买产品。

产品表:

ID | NAME
---+----------
1  | "jacket"
2  | "pants"

价格表:

ID | PRODUCT_ID | DATE       | PRICE
---+------------+------------+-------
1  | 1          | 2015-05-12 | 200
2  | 1          | 2015-07-12 | 100
3  | 2          | 2015-03-12 | 60
4  | 2          | 2015-08-12 | 90

预期结果:

1, "jacket", 100
2, "pants", 90

我该怎么做?

实际上我找到了解决方案 - 但是有2个子查询。看起来不太好。

1 个答案:

答案 0 :(得分:2)

找出每个价格的最大日期,然后与其余表格进行内部联接。

SQL Fiddle

SELECT aa.id, aa.name, bb.price
FROM products AS aa
INNER JOIN prices AS bb
ON aa.id = bb.product_id
INNER JOIN (
    SELECT product_id, MAX(date) AS max_date
    FROM prices AS cc
    GROUP BY product_id
) AS _aa
ON aa.id = _aa.product_id
WHERE bb.date = _aa.max_date;