0

問題があります。私は3つのテーブルを持っていProductますVersion、、Date

依存関係:

  • version.ProductId = Product.Id(1つの製品には> = 1のバージョンがあります)
  • Date.VersionId = Version.ID(1対1)

ペア商品を入手したい-バージョンDateVersionMax(各商品)

何かのようなもの:

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

groupby句に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 に答える