エネルギー使用量に対する季節的な影響を確認するには、請求データベースから取得したエネルギー使用量情報を月ごとの気温に合わせる必要があります。
さまざまな長さの請求書と開始日と終了日を持つ請求データセットを使用しています。各月の各アカウントの月平均を取得したいと思います。たとえば、次の特性を持つ課金データベースがあります。
acct amount begin end days
1 2242 11349 2009-10-06 2009-11-04 29
2 2242 12252 2009-11-04 2009-12-04 30
3 2242 21774 2009-12-04 2010-01-08 35
4 2242 18293 2010-01-08 2010-02-05 28
5 2243 27217 2009-10-06 2009-11-04 29
6 2243 117 2009-11-04 2009-12-04 30
7 2243 14543 2009-12-04 2010-01-08 35
これらのやや不規則な時系列(アカウントごと)を強制して、各請求書にまたがる各月の1日あたりの平均金額を取得する方法を理解したいと思います。
acct amount begin end days avgamtpday
1 2242 11349 2009-10-01 2009-10-31 31 X
2 2242 12252 2009-11-01 2009-11-30 30 X
3 2242 21774 2009-12-01 2010-12-31 31 X
4 2242 18293 2010-01-01 2010-01-31 31 X
4 2242 18293 2010-02-01 2010-02-28 28 X
5 2243 27217 2009-10-01 2009-10-31 31 X
6 2243 117 2009-11-01 2009-11-30 30 X
7 2243 14543 2009-12-01 2009-12-31 30 X
7 2243 14543 2010-01-01 2010-01-31 31 X
私はこれを一度だけ行う必要があるので、どのツールがこれを行うことができるかについてはかなり不可知論者です。
追加のしわは、テーブルの長さが約150,000行であるということです。これは、ほとんどの標準ではそれほど大きくはありませんが、Rでのループソリューションを困難にするのに十分な大きさです。Rでzoo、xts、tempdisaggパッケージを使用して調査しました。各請求書を分割し、既存の請求書内に毎月1行を作成し、tapply()を使用してアカウントごとに要約する非常に醜いループを書き始めました。と数ヶ月、しかし正直なところ、それを効率的に行う方法を見ることができませんでした。
MySQLでは、これを試しました。
ビューv3をselect1n union all select 1 union allselect1として作成または置換します。
ビューvをv3a、v3 b union allselect1からselect1nとして作成または置換します。
@n=0に設定します。
カレンダーが存在する場合はテーブルを削除します。テーブルカレンダーを作成します(dt日付主キー);
カレンダーに挿入
selectcast( '2008-1-1' + interval @ n:= @ n + 1 day as date)as dt from va、vb、vc、vd、ve、v;select acct、amount、begin、end、billAmtPerDay、sum(billAmtPerDay)、MonthAmt、count()Days、sum(billAmtPerDay)/ count()AverageAmtPerDay、year(dt)、month(dt)FROM(select *、amount / days billAmtPerDay from bills b internal join calendar c on dt between begin and end and begin <> dt)x group by acct、amount、begin、end、billAmtPerDay、year(dt)、month(dt);
しかし、私にはわからない理由で、私のサーバーはこのテーブルが気に入らず、さまざまな計算をステージングしても、内部結合でハングアップします。一時的なメモリ制限があるかどうかを調査しています。
ありがとう!