カラムID、Start_date、End_date、Duration、Valueのメンバーシップテーブルがあります
ID | Start_date | End_date | Duration | Value |
1 | 2012-08-12 |2012-09-12| 30 | 10 |
2 | 2011-05-22 |2013-05-22| 720 | 2000 |
等々
私はそれを2つの列に変えたいと思います。1つはその年の毎日の日付を持ち、もう1つはその日のメンバーシップのすべての価値/期間の合計を持ちます。
最終的には月額に変換する必要があります。これにより、メンバーシップを実行することで、将来どのような収益が期待できるかが明確になります。
今、私は次のようなことをしました
select
sum(if("2012-01-01" between start_date and end_date, total_value/duration, null)) as "2012-01-01",
sum(if("2012-01-02" between start_date and end_date, total_value/duration, null)) as "2012-01-02",
[...]
sum(if("2013-12-31" between start_date and end_date, total_value/duration, null)) as "2013-12-31"
from MembershipsTable
/ *影響を受けた0行、1行が見つかりました。1回のクエリの所要時間:3,666秒。* /
しかし、それらを簡単に合計して1か月あたりの値を算出する方法がわかりません。列の合計をもう一度作成することもできますが、テキストの小説を入力する必要はありません。
実行時間は現在の形式では問題ではありません
形状の出力が必要です
Month | Sum |
Jan 2012 |4500 |
Feb 2012 |4215,91 |
ここで、合計は、その期間と交差するすべてのメンバーシップの合計であり、1日あたりの価格*メンバーシップがその月に持つ日数によって計算されます。
したがって、メンバーシップが11月12日に開始し、12月11日に終了し、期間が30で、値が300の場合、11月に300/30 * daysInNovを追加します。これは、12月と同じで、11月に+190、 12月私はそのようにすべてのメンバーシップの合計が必要です。
誰かが何か考えを持っていますか?