–价格(产品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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的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. 最后,按照Product
的prodId
进行排序。
请注意,根据你的数据库系统(如MySQL、PostgreSQL等),日期字段周围的引号可能需要调整。某些数据库系统可能不使用双引号来包围列名,而是使用反引号(`)或不需要任何引号。务必根据实际情况调整SQL语法。