该解决方案更加灵活,因为它可以让你从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;