アクティビティを示すフィールドとともに、月ごとのアカウントのリストを含むテーブルがあります。次の基準に基づいて、アカウントがいつ「死亡」したかを検索したいと考えています。
- アカウントは、連続した月間、一貫したアクティビティを持っていました
- 最終月にアカウントのアクティビティが急増した (スパイク = 過去の連続するすべての月のアクティビティの平均の 200% 以上)
- アクティビティが急増した直後の月と次の 12 か月はすべてアクティビティがありませんでした
したがって、テーブルは次のようになります。
ID | Date | Activity
1 | 1/1/2010 | 2
2 | 1/1/2010 | 3.2
1 | 2/3/2010 | 3
2 | 2/3/2010 | 2.7
1 | 3/2/2010 | 8
2 | 3/2/2010 | 9
1 | 4/6/2010 | 0
2 | 4/6/2010 | 0
1 | 5/2/2010 | 0
2 | 5/2/2010 | 2
したがって、この場合、アカウント 1 と 2 の両方が 1 月から 3 月に活動しています。どちらのアカウントも 3 月に活動が急増しています。どちらのアカウントも 4 月のアクティビティはありません。アカウント 2 は 5 月に再び活動がありますが、アカウント 1 は活動していません。したがって、私のクエリはアカウント 1 を返しますが、アカウント 2 は返しません。これをクエリ結果として表示したいと思います。
ID | Last Date
1 | 3/2/2010
これは複雑な質問であり、誰かが私のためにクエリ全体を書いてくれるとは思っていません。私が考えることができる現在の最善のアプローチは、一連のサブクエリを作成して結合することですが、サブクエリがどのようになるかさえわかりません。例: アクティビティがすべて 0 (またはすべてゼロ以外) である単一 ID の連続した一連の行を探すにはどうすればよいですか?
SQL が単純に複雑すぎる場合の私のフォールバックは、Java を使用してブルート フォース検索を使用することです。最初にすべての一意の ID を見つけてから、一意の ID ごとに月間で繰り返し、ID が「死んだ」かどうか、いつ死んだかを判断します。 .
繰り返しますが、正しい方向に進むための助けをいただければ幸いです。