Zapytanie SQL: znajdź najwyższy miesięczny/rok dochód klienta


Chcę przeszukać bazę danych, aby znaleźć najwyższy miesięczny dochód dla wszystkich klientów w systemie. Mam zapytanie pracujące w celu wygenerowania miesięcznego dochodu dla klientów za wszystkie lata, w których są obecne dane. Ale staram się dowiedzieć, jak na podstawie tych danych uzyskać najwyższe miesięczne zarobki w skali roku.
Baza danych SQL Server 2008 R2.
Kolumny: nazwa klienta, rok, miesiąc i dochód.
Próbowałem nawet użyć Row_Number () i próbowałem podzielić według nazwy klienta/roku i zamówienia według przychodów. Ale to nie zadziałało. Może popełniam jakiś błąd.
W ten sposób próbowałem zbudować podstawowe zapytanie.
Select Customer, Year(orderdatetime) as Year, Month(orderdatetime) as Month, SUM(Revenue)
From Orders
Group By Customer, Year(orderdatetime), Month(orderdatetime)

Oto jak próbowałem użyć Row_Number ()
WITH Max_Revenue AS
(Select Customer, Year(orderdatetime) as Year, Month(orderdatetime) as Month, SUM(Revenue), RowNumber = ROW_NUMBER() OVER(PARTITION By Year Order By Revenue DESC)
From Orders
Group By Customer, Year(orderdatetime), Month(orderdatetime))
Select Max_Revenue.Customer, Max_Revenue.Year, Max_Revenue.Month, Max_Revenue.Revenue
From Max_Revenue
Where Max_Revenue.RowNumber = 1
Order By Max_Revenue.Customer asc

Dane, które otrzymuję, są takie:
Customer Month Year Revenue
ABC 2 2012 100
ABC 3 2013 150
ABC 5 2012 200
XYZ 4 2011 500
XYZ 6 2012 650
XYZ 7 2012 800

W rezultacie chcę
Customer Month Year Revenue
ABC 5 2012 200
XYZ 7 2012 800

W ten sposób każdy klient jest najlepszym miesiącem i odpowiednim rokiem pod względem dochodów.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

SELECT Customer,
Year,
Revenue,
Month
FROM ( SELECT Customer,
Year,
ROW_NUMBER() OVER(PARTITION By Customer Order By Revenue DESC) as rank,
Revenue,
Month FROM ( Select Customer,
Year(orderdatetime) as Year,
Month(orderdatetime) as Month,
SUM(Revenue) as Revenue
From Orders
Group By
Customer,
Year(orderdatetime),
Month(orderdatetime)
) BS GROUP BY Customer,
Year,
Month) BS2
WHERE BS2.rank = 1

LUB zmień = ROW_NUMBER () powyżej (sekcja według roku według dochodu w DESC
= ROW_NUMBER () powyżej (sekcja według firmy zamawiającej DESC

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się