আমি মনে করি এটি অন্য কার্যকরগুলির চেয়ে আরও কার্যকরী হতে পারে তবে শর্ত থাকে যে আপনি যদি একটি সূচক থাকে:
;
WITH PurchaseTable AS
(
SELECT *
FROM (VALUES ((501),('Carson'),(3400)),
((502),('Thomas'),(625)),
((503),('Daisy'),(4856)),
((504),('Mary'),(2397)),
((505),('Carson'),(5000))
) AS T(Order_No,Customer_Name,Purchase_Cost)
),
DistinctCustomers AS
(
SELECT DISTINCT
Customer_Name
FROM PurchaseTable
)
SELECT TOP(3)
MaxCustomerOrder.Order_No,
dc.Customer_Name,
MaxCustomerOrder.Purchase_Cost
FROM DistinctCustomers dc
CROSS APPLY (SELECT TOP(1) *
FROM PurchaseTable pt
WHERE pt.Customer_Name = dc.Customer_Name
ORDER BY pt.Purchase_Cost DESC
) AS MaxCustomerOrder
ORDER BY MaxCustomerOrder.Purchase_Cost DESC
;
অথবা ইনলাইন টেবিল সংজ্ঞা ছাড়াই:
;
WITH DistinctCustomers AS
(
SELECT DISTINCT
Customer_Name
FROM PurchaseTable
)
SELECT TOP(3)
MaxCustomerOrder.Order_No,
dc.Customer_Name,
MaxCustomerOrder.Purchase_Cost
FROM DistinctCustomers dc
CROSS APPLY (SELECT TOP(1) *
FROM PurchaseTable pt
WHERE pt.Customer_Name = dc.Customer_Name
ORDER BY pt.Purchase_Cost DESC
) AS MaxCustomerOrder
ORDER BY MaxCustomerOrder.Purchase_Cost DESC
;