Вы можете использовать CTE (Common Table Expression) с функцией ROW_NUMBER
:
;WITH HighestPricePerCustomerAndBasket AS
(
SELECT
ID, UserID, ClassID, SchoolID, Created,
ROW_NUMBER() OVER(PARTITION BY BasketID,CustomerID ORDER BY Price DESC) AS 'RowNum'
FROM dbo.YourTable
)
SELECT
[Price], BasketID, CustomerID
FROM HighestPricePerCustomerAndBasket
WHERE RowNum = 1
Этот CTE "разбивает" ваши данные на BasketID,CustomerID
, а для каждого раздела ROW_NUMBER
Функция выдает последовательные числа, начиная с 1 и упорядочивая по Price DESC
- поэтому первая строка (самая высокая цена) получает RowNum = 1
(для каждого BasketID,CustomerID
"раздела"), что я выбираю из CTE в операторе SELECTпосле него.