該解決方案更加靈活,因爲它可以讓你從Customers
表中添加任何列,而無需將它們添加到GROUP BY
:
;WITH x AS
(
SELECT CustomerID, OrderDate = MIN(OrderDate)
FROM dbo.Orders GROUP BY CustomerID
)
SELECT c.CustomerID, c.CompanyName, x.OrderDate
FROM dbo.Customers AS c
INNER JOIN x ON c.CustomerID = x.CustomerID
ORDER BY c.CustomerID;
如果你想從第一階等欄目也可以這樣做,您可以這樣做,在使用GROUP BY
時無法添加,例如,最便宜或最貴的訂單不一定與第一個訂單對應:
;WITH x AS
(
SELECT CustomerID, OrderDate, TotalAmount, /* ...other columns... */
rn = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderDate)
FROM dbo.Orders GROUP BY CustomerID
)
SELECT c.CustomerID, c.CompanyName, x.OrderDate, x.TotalAmount /* ...others... */
FROM dbo.Customers AS c
INNER JOIN x ON c.CustomerID = x.CustomerID
WHERE x.rn = 1
ORDER BY c.CustomerID;