2011-10-14 87 views
0

我有一個SQL Server 2008數據庫。這個數據庫有一個名爲Product,Order和OrderProduct的表。這三個表如下所示:SQL Server 2008數據庫中類似記錄的不同

Product 
------- 
ID 
Name 
Description 

Order 
----- 
ID 
OrderDate 
Status 

OrderProduct 
------------ 
OrderID 
ProductID 
Quantity 

我試圖找出最後三個獨特產品的人訂購。不過,我還需要包含產品訂購的最後日期。我的問題是我一直得到一個結果集是這樣的:

豆類能(10/10/2011) 純鹼(10/09/2011) 豆類能(10/08/2011)

第二個「Can Beans」不應該在那裏,因爲我已經展示了「Can Beans」。我的查詢是這樣的:

SELECT TOP 3 DISTINCT 
    p.[Name], 
    o.[OrderDate] 
FROM 
    [Product] p, 
    [Order] o 
    [OrderProduct] l 
WHERE 
    l.[ProductID]=p.[ID] and 
    l.[OrderID]=o.[ID] 
ORDER BY 
    o.[OrderDate] DESC 

我知道DISTINCT不會工作的原因是因爲訂單日期不同。不過,我不知道如何解決這個問題。有人能告訴我如何解決這個問題嗎?

回答

0

你試過GROUP BY嗎?

SELECT TOP 3 
    p.[Name], 
    max(o.[OrderDate]) 
FROM 
    [Product] p, 
    [Order] o 
    [OrderProduct] l 
WHERE 
    l.[ProductID]=p.[ID] and 
    l.[OrderID]=o.[ID] 
GROUP BY p.[Name] 
ORDER BY 
    max(o.[OrderDate]) DESC 
2
WITH cteProducts AS (
    SELECT p.Name, o.OrderDate, 
      ROW_NUMBER() OVER(PARTITION BY p.Name ORDER BY o.OrderDate DESC) as RowNum 
     FROM Product p 
      INNER JOIN OrderProduct op 
       ON p.ID = op.ProductID 
      INNER JOIN Order o 
       ON op.OrderID = o.ID 
) 
SELECT TOP 3 Name, OrderDate 
    FROM cteProducts 
    WHERE RowNum = 1 
    ORDER BY OrderDate DESC; 
0

,嘗試按這樣的:

SELECT TOP 3 
    p.[Name], 
    MAX(o.[OrderDate]) 
FROM 
    [Product] p, 
    [Order] o 
    [OrderProduct] l 
WHERE 
    l.[ProductID]=p.[ID] and 
    l.[OrderID]=o.[ID] 
GROUP BY p.[Name] 
ORDER BY 
    MAX(o.[OrderDate]) DESC 
0

使用GROUP BY ......它是因爲我已經使用SQL Server中的一段時間,但查詢會是這個樣子:

SELECT TOP 3 
    p.[Name], 
    max(o.[OrderDate]) AS MostRecentOrderDate 
FROM 
    [Product] p, 
    [Order] o 
    [OrderProduct] l 
WHERE 
    l.[ProductID]=p.[ID] and 
    l.[OrderID]=o.[ID] 
GROUP BY p.[Name] 
ORDER BY 
    MostRecentOrderDate DESC 

或者要顯示他們第一次訂購該產品,請選擇min()而不是max()

相關問題