SQL - 无效查询,因为它不包含在聚合函数或group by子句中

时间:2012-07-30 09:36:20

标签: sql-server tsql

我遇到了一些问题。我有3个表ProductVersionDate

依赖关系:

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

如何处理?

2 个答案:

答案 0 :(得分: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

答案 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