具有最近日期的INNER JOIN ID

问题描述 投票:0回答:2

–价格(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有关,因为这是我第一次尝试使用它,但无法在线找到答案。

mysql sql sql-server relational-database greatest-n-per-group
2个回答
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
投票

尽管还有其他表达此查询的方法,但是您已经从一个单独的子查询的路径开始以获取最大日期。正确的语法如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.