–价格(产品ID ,日期) –产品(产品ID ,名称)
假设我们有上面的表,如果我想在价格表中选择每种产品的ID和最近的日期,我将如何将这两个表进行内联接?
我有以下代码,并且在GROUP BY行上收到语法错误。
SELECT Product.prodId, Price.price, Price."date"
FROM Product
INNER JOIN Price
INNER JOIN(
SELECT Price.price, max("date") as currentPrice)cp
GROUP BY Price.prodId
ON Product.prodID = Price.prodId
ORDER BY Product.prodID;
我认为它与嵌套的INNER JOIN有关,因为这是我第一次尝试使用它,但无法在线找到答案。
答案 0 :(得分:1)
通常,最有效的方法是联接表并使用相关的子查询进行过滤:
select p.*, i.*
from product p
inner join price i
on i.prodID = p.prodID
and i.date = (
select max(i1.date) from price i1 where i1.prodID = i.prodID
)
为了提高性能,您希望在price(prodID, date)
上建立索引。
答案 1 :(得分:1)
尽管还有其他表达此查询的方法,但是您已经开始了单独的子查询的路径以获取最大日期。正确的语法如下所示:
SELECT p.prodId, pr.price, pr."date"
FROM Product p INNER JOIN
Price pr
ON p.prodID = pr.prodId JOIN
(SELECT pr2.prodId, max("date") as max_date
FROM Price pr2
GROUP BY pr2.prodId
) cp
ON pr2.prodId = pr.prodID and pr2.max_date = pr.date
ORDER BY p.prodID;
您的查询刚刚结束。 GROUP BY
应该在子查询中,例如,该子查询缺少FROM
子句。