我有一个mysql查询,它通过product_id链接3个表。
SELECT
P.product_id, P.title, P.unit,
Pp.date, Pp.price, Pp.wasprice,
C.quantity, C.date_added
FROM productdetail P
INNER JOIN
productprices Pp
ON P.product_id = Pp.product_id
RIGHT JOIN
cart C
ON Pp.product_id = C.product_id
WHERE C.session = :session AND C.quantity > 0
如果表productprices 中有一个或多个条目,则此查询将提供所有日期。我只需要每个product_id的最新条目。因此,在下面的小提琴中,它应该导致3个不同的项目都具有最新日期。
我创建了一个 sql fiddle 来向您展示我的意思,并让您更轻松地进行编辑。我尝试过子查询,但都无济于事。
干杯
答案 0 :(得分:1)
您可以为子查询中的每个date
获取最新的product_id
,结果就是加入表productdetail
例如
SELECT
P.product_id, P.title,
Pp.date, Pp.price,
C.quantity, C.date_added
FROM
productdetail P
INNER JOIN
productprices Pp
ON P.product_id = Pp.product_id
INNER JOIN
(
SELECT product_id, MAX(date) AS max_date -- << this part will get the latest row
FROM productprices -- << in every product_id
GROUP BY product_id
) maxx
ON Pp.product_id = maxx.product_id
AND Pp.date = maxx.max_date
RIGHT JOIN
cart C
ON Pp.product_id = C.product_id
WHERE C.session = 12345 AND C.quantity > 0