0

我需要所有产品的列表,其中包含 2 列,其中包含产品首次订购的日期和该产品的订购数量。

结构:
tbl_product
- productID
- productName

tbl_orderProduct
- orderProductID
- orderID
- productID
- 数量

tbl_order
- orderID
- 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 通过 select 获取订单,因为它有可能不是唯一的。

此外,我无法通过“左连接”中的选择传递 orderID,因为我还必须将其添加到“分组依据”中,并且它会为包含该产品的每个订单返回一行。所以我必须以某种方式从第一个订单中检索 orderID 或 orderProductID。

提前致谢!

4

1 回答 1

0

假设您至少使用 SQL-Server2005,您可以使用带有ROW_NUMBER函数的 common-table-expression:

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
于 2012-07-27T15:19:46.987 回答