LEFT JOIN 到最新行
LEFT JOIN to newest row
我正在尝试从一个 table 获取数据和第二个 table 的附加数据,但是在第二个 table 我有很多记录连接到第一个 table 的记录,我想要拿最新的。
首先 table 我保留产品,其次我保留价格和数据。我要拿实际(最新)价格的产品。
产品table:
ID | NAME
---+----------
1 | "jacket"
2 | "pants"
价格table:
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 个子查询。不太好看
找到每个价格的最大日期,然后与其余表进行内部联接。
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;
我正在尝试从一个 table 获取数据和第二个 table 的附加数据,但是在第二个 table 我有很多记录连接到第一个 table 的记录,我想要拿最新的。
首先 table 我保留产品,其次我保留价格和数据。我要拿实际(最新)价格的产品。
产品table:
ID | NAME
---+----------
1 | "jacket"
2 | "pants"
价格table:
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 个子查询。不太好看
找到每个价格的最大日期,然后与其余表进行内部联接。
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;