2012-07-27 101 views
0

我需要包含2欄的所有產品的列表,其中包含產品首次訂購的日期和產品的訂購數量。從最早的日期開始選擇行

結構:
tbl_product
-
的productID - 產品名稱

tbl_orderProduct
- orderProductID
- 單編號
-
的productID - 數量

tbl_order
- 或derID
- orderedDate

SELECT p.productName, firstOrder.orderedDate FROM tbl_product p 
LEFT JOIN(
    SELECT op.productID, MIN(o.orderedDate) AS orderedDate FROM tbl_orderProduct op 
    JOIN tbl_order o ON op.orderID = o.orderID 
    GROUP BY op.productID 
) 
firstOrder ON firstOrder.productID = p.productID 

我第一次提取日期的嘗試工作,但迄今爲止我無法弄清楚如何獲得數量,因爲我要拿到訂單,然後回到tbl_orderProduct的數量。
我不想通過firstOrder.ordererdDate選擇訂單,因爲這有可能不是唯一的。

此外,我不能通過在我的'左加入'選擇orderID它,因爲我也必須將它添加到'分組依據'然後它會返回包含產品的每個訂單的行。 所以我不得不從第一個訂單檢索orderID或orderProductID。

在此先感謝!

+1

什麼DBMS和版本? – 2012-07-27 15:13:03

+0

你正在使用什麼數據庫? – RedFilter 2012-07-27 15:13:15

+0

這是SQL Server 2008 .. sry – falias 2012-07-27 17:46:17

回答

0

假設你正在使用至少SQL-Server2005中,你可以使用一個公共表表達式與ROW_NUMBER功能:

WITH CTE AS 
(
    SELECT p.productName, o.orderedDate, quantity 
    , RN = ROW_NUMBER() OVER (PARTITION BY p.productID ORDER BY o.orderedDate) 
    FROM tbl_product p 
    INNER JOIN tbl_orderProduct op ON p.productID=op.productID 
    INNER JOIN tbl_order o ON op.orderID=o.orderID 
) 
SELECT * FROM CTE WHERE RN = 1 
+0

SUM()不是必需的,因爲我只需要第一個訂單的數量,但除此之外,它正是我需要的.. 非常感謝! :) – falias 2012-07-28 12:16:58

相關問題