(最初に私の問題を説明します。以下の表(クエリの例)は http://sqlfiddle.com/#!2/8ec17/4で入手できます)
次のように、株式情報の表があります。
sp100_id _date bullishness returnpct
----------------------------------------------
1 2011-03-16 1.01 -0.33
1 2011-03-17 0.85 -1.28
1 2011-03-18 0.89 1.25
1 2011-03-21 1.46 1.21
1 2011-03-22 0.39 -2.53
2 2011-03-16 3.07 1.27
2 2011-03-17 2.09 -0.80
2 2011-03-18 0.91 -0.12
2 2011-03-21 1.50 0.00
2 2011-03-22 2.62 1.10
3 2011-03-16 0.73 -1.13
3 2011-03-17 1.13 1.21
3 2011-03-18 1.12 0.45
3 2011-03-21 1.00 1.01
3 2011-03-22 1.00 -0.53
4 2011-03-16 0.40 1.10
4 2011-03-17 2.40 0.03
4 2011-03-18 3.16 -0.10
4 2011-03-21 0.86 0.50
4 2011-03-22 1.00 0.10
私が必要なのは:
- 連続する3日ごとに、各企業の平均強気を計算します(
sp100_id
) returnpct
平均強気が最も高い会社の3日目を取り、それを保管しますreturnpct
最後に、保存されているreturnpct
sを合計して合計を計算します
この例には5_date
秒あるため、次の連続する日のペアを作成する必要があります。
2011-03-16
、、2011-03-17
_2011-03-18
2011-03-17
、、(注意してください、2011-03-19は表にありません2011-03-18
)2011-03-21
2011-03-18
、、2011-03-21
_2011-03-22
必要なものに戻るには:
- 最初の3日間の「勝者」は、平均ブルシネスが(3.07 + 2.09 + 0.91)/ 3 = 2.0233で、3日目のリターンが-0.12の会社2です。他の2つの「日付範囲」の勝者は、会社4(平均ブルシネス2.14およびreturnpct 0.50)と会社2(ブルシネス1.67、returnpct 1.10)です。
- -0.12、0.50、1.10の値を保存する必要があります
- その場合、合計returnpctは-0.12 + 0.50 + 1.10 = 1.48になります。これは、クエリ(またはスクリプト)から返される必要があります。
問題1:上記の例に関して、私のクエリは3日目(-0.12)returnpct
ではなく1日目(1.27)を返します。returnpct
どうすればこれを変更できますか?
問題2: sqlfiddleで、3日間連続して最初のグループをハードコーディングしました。すべてのクエリを手動で入力する必要がないように、これを(おそらくphpを使用して)自動化するにはどうすればよいですか?表に日付がないことに注意してください。例のように、スクリプトはテーブルで次に利用可能な日付を取得する必要があります(したがって、テーブルにないためで2011-03-18
はなく、後になります)2011-03-21
2011-03-19
問題3:この例では、連続3日を使用していますが、理想的には、スクリプトを簡単に変更して、他の連続日数(たとえば、2、4、または8日)を取ることができます。したがって、それぞれ2日目、4日目、または8日目の返品を保管する必要があります。
私がここで経験している問題のいくつかについて、誰が私を助けてくれますか?どんな助けでも大歓迎です:-)