开发者社区 问答 正文

最近加入日期的INNER JOIN ID

–价格(产品ID,日期)–产品(产品ID,名称)

假设我们有上面的表,如果我想在价格表中选择每个产品的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有关,因为这是我第一次尝试使用它,但无法在线找到答案。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 09:57:37 357 分享 版权
阿里云 AI 助理回答

你的SQL查询中确实存在一些语法问题,主要在于你尝试嵌套JOIN和子查询的方式。为了从Price表中选择每个产品的ID及其最近的日期,并与Product表进行INNER JOIN,你可以使用子查询来先找到每个产品ID的最新日期,然后再进行JOIN。下面是修正后的SQL查询示例:

SELECT P.prodId, Pr.price, Pr."date"
FROM Product P
INNER JOIN (
    SELECT prodId, price, "date"
    FROM Price
    WHERE ("date", prodId) IN (
        SELECT MAX("date"), prodId
        FROM Price
        GROUP BY prodId
    )
) Pr ON P.prodId = Pr.prodId
ORDER BY P.prodId;

这个查询的工作流程如下: 1. 子查询首先从Price表中找出每个prodId的最新日期(通过MAX("date")分组)。 2. 然后,外层查询将这个结果与Product表通过prodId进行INNER JOIN,以确保你获取到的是每个产品的最新价格信息。 3. 最后,按照ProductprodId进行排序。

请注意,根据你的数据库系统(如MySQL、PostgreSQL等),日期字段周围的引号可能需要调整。某些数据库系统可能不使用双引号来包围列名,而是使用反引号(`)或不需要任何引号。务必根据实际情况调整SQL语法。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: