Это решение является более гибким, поскольку он позволяет добавлять любые столбцы из 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;