3

このSQLクエリを正しく取得できません...

からの最新の上位 5 件のコメントが必要tblCommentです。問題は、同じコメントで複数のコメントを取得することProductIDです。私はそれをしたくありません。

SELECT DISTINCT TOP 5
   tblProduct.ProductID, 
   tblProduct.ProductName, 
   tblComment.DateAdded
FROM   
    tblComment 
INNER JOIN 
    tblProduct ON tblProduct.ProductID = tblComment.ProductID
ORDER BY 
    tblComment.DateAdded DESC

私は何を間違っていますか?

4

3 に答える 3

6

コメントテーブルにidフィールドがあると仮定して、これを試してください。

SELECT TOP 5

tblProduct.ProductID, 
tblProduct.ProductName, 
tblComment.DateAdded

FROM   tblComment 
JOIN   tblProduct ON tblProduct.ProductID = tblComment.ProductID
JOIN   (Select ProductID, max(id) as maxid From tblComment Group By ProductId) t on tblComment.id = t.maxid 

ORDER BY tblComment.DateAdded DESC
于 2012-04-10T18:06:08.517 に答える
0

サブ選択する必要があります-ニーズに合わせて次の例を使用してください。

SELECT TOP 5 tblProduct.ProductID, 
          tblProduct.ProductName, 
          tblComment.DateAdded
FROM   tblComment INNER JOIN
    tblProduct ON tblProduct.ProductID = tblComment.ProductID
    and tblProduct.ProductID 
      IN (
            SELECT tblProduct.ProductID 
            FROM tblComment 
                   INNER JOIN tblProduct ON tblProduct.ProductID = tblComment.ProductID
            GROUP BY tblProduct.ProductID 
            HAVING count( tblProduct.ProductID  ) =1
         )
于 2012-04-10T18:05:20.017 に答える
0

最新のコメントの時間によってランク付けされた製品。

このアプローチでは、CTE とランク関数を使用します。このクエリは小さいですが、より大きなクエリでは、これらの関数によって物事がより整理され、読みやすくなります。

with lastComment as (
  select c.productID, max(DateAdded) DateAdded, 
    row_number() over(order by max(dateAdded)) rank
  from tblComment c
  group by c.productID

)

SELECT
   tblProduct.ProductID, 
   tblProduct.ProductName, 
   tblComment.DateAdded
FROM   
    tblProduct 
    join lastComment ON tblProduct.ProductID = lastCommnet.ProductID
WHERE
   lastComment.rank >= 5
ORDER BY lastComment.rank
于 2012-04-10T19:30:37.693 に答える