使用しているテーブルが2つあります。それらを「顧客」と「ポイント」と呼びましょう。
ポイントテーブルは次のようになります。
Account Year M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12
123 2011 10 0 0 0 10 0 10 0 0 0 0 10
123 2012 0 0 0 0 10 0 0 10 10 10 10 20
123 2013 5 0 0 0 0 0 0 0 0 0 0 0
しかし、これらのポイントは12か月ごとに機能します。現在の顧客のポイントを計算することは十分に簡単ですが、課題はもはや活動していない顧客にとってです。2013年1月に顧客123が非アクティブになったとすると、12年2月から13年1月までの計算のみが必要になります。ここで、もう1つのテーブルCustomersが登場します。単純化して、次のようになります。
Account End Date
123 20130105
さて、私がやりたいのは、各顧客が持っているポイントの量を計算するクエリを作成することです。(アクティブな顧客の場合は現在12か月、アクティブではなくなった顧客の場合は過去12か月がアクティブでした。)
詳細は次のとおりです。
- SQLServer2008を実行しています。
- これらのテーブルはこのように提供されており、変更することはできません。
- アクティブな顧客とは、終了日が99991231(9999年12月31日)の顧客です。
- ポイントテーブルは、顧客がアクティブな顧客である年だけ入力されます。別名、誰かが2009年2月にアクティブな顧客になり、2009年のエントリがあります。2009年7月に非アクティブになった場合、ポイントは2009年2月から7月までしか計算されません。顧客ではなかったため、2008年の行はありません。当時。2009年1月と8月から12月に0が表示されます。
- さらに、レコードは、顧客がその年にポイントを獲得した場合にのみ作成されます。顧客が1年に0ポイントを獲得した場合、その記録はありません。
- 国境の場合、月の初日に入ると、その月がカウントされます。たとえば、今日が2013年4月1日であるとしましょう。つまり、2013年5月12日から4月までを合計します。
これはかなり複雑な質問です。もっとよく説明できることがあれば教えてください。ありがとうございました!