データベースにクエリを実行して、システム内のすべての顧客の最高収益月を見つけようとしています。データが存在するすべての年から顧客の月間収益を引き出すクエリが機能しています。しかし、このデータから毎月最高の収益を得る方法を見つけるのに苦労しています。
データベースは SQL Server 2008 R2 です。列は、顧客名、年、月、収益です。Row_Number() を使用してみたり、顧客名/年によるパーティショニングと収益による並べ替えを試したりしました。しかし、うまくいきませんでした。多分私はそこで何か間違いを犯しています。
ベースクエリを作成しようとした方法は次のとおりです。
Select Customer, Year(orderdatetime) as Year, Month(orderdatetime) as Month, SUM(Revenue)
From Orders
Group By Customer, Year(orderdatetime), Month(orderdatetime)
これは私が 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
返されるデータは次のようなものです。
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
出力として欲しいのは
Customer Month Year Revenue
ABC 5 2012 200
XYZ 7 2012 800
したがって、収益の観点から、すべての顧客の最高の月とそれぞれの年です。