最近加入日期的INNER JOIN ID

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

yl987987 回答:最近加入日期的INNER JOIN ID

通常,最有效的方法是联接表并使用相关的子查询进行过滤:

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)上建立索引。

,

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

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子句。

本文链接:https://www.f2er.com/3084298.html

大家都在问