–价格(prodID,日期)–产品(prodID,名称)
假设我们有上面的表,如果我想在价格表中选择每个产品的ID和最近的日期,我将如何将这两个表INNER JOIN?
我有以下代码,并且在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有关,因为这是我第一次尝试使用它,但无法在线找到答案。
通常,最有效的方法是联接表并使用相关的子查询进行过滤:
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)
上建立索引。
尽管还有其他表达此查询的方法,但是您已经从一个单独的子查询的路径开始以获取最大日期。正确的语法如下所示: