0

我有一些问题。我有 3 张桌子Product, Version, Date.

依赖项:

  • version.ProductId = Product.Id(一个产品有 >=1 个版本)
  • Date.VersionId = Version.ID(一对一)

我想获得pairs product - Max 的版本DateVersion对于每个产品)

就像是:

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

如何处理?

4

2 回答 2

1

您需要在 group by 子句中包含 v.Name

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 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
于 2012-07-30T09:37:46.630 回答
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
于 2012-07-30T09:43:39.247 回答