我遇到了一些问题。我有3个表Product
,Version
,Date
。
依赖关系:
version.ProductId = Product.Id
(有一个产品的> = 1个版本)Date.VersionId = Version.ID
(一对一)我想获得配对产品 - Date
Version
为最大(每种产品)的版本
类似的东西:
Product 1 - 1.0
Product 2 - 0.9 etc
我尝试了以下查询:
SELECT
productName, versionName
FROM
(SELECT
p.Name AS productName, v.Name AS versionName, MAX(d.Date) AS ddate
FROM
Product AS p
INNER JOIN
Version AS v ON v.ProductId = p.Id
INNER JOIN
Date AS d ON d.VersionId = v.Id
WHERE
(d.Date < { fn CURDATE() })
GROUP BY p.Name) AS prd
但是我收到了一个错误:
列Version.Name在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
如何处理?
答案 0 :(得分:1)
您需要在group by子句
中包含v.NameSELECT productName, versionName
FROM
(SELECT p.Name AS productName, v.Name AS versionName, MAX(d.Date) AS ddate
FROM Product AS p INNER JOIN Version AS v ON v.ProductId = p.Id
INNER JOIN VDate AS d ON d.VersionId = v.Id
WHERE (d.Date < { fn CURDATE() })
GROUP BY p.Name, v.Name
) AS prd
编辑。
select
product.name,
version.name
from
product
inner join
version
on product.id = version.productid
inner join
date on version.id = date.versionid
inner join
(
select productid, MAX(date) as maxdate
from version
inner join date on version.id = date.versionid
group by productid
) maxver
on date.date = maxver.maxdate
and version.productid = maxver.productid
答案 1 :(得分:0)
试试这个
SELECT p.Name AS productName, v.Name AS versionName
FROM Product AS p INNER JOIN Version AS v ON v.ProductId = p.Id
inner join
(select VersionId,MAX(d.Date) from VDate group by Versionid) AS d
on d.VersionId = v.Id
WHERE and d.Date < { fn CURDATE() }
GROUP BY p.Name,v.name