0

私は人々がいくつかの株を選ぶことができ、ポートフォリオを評価するシステムを持っていますが、変更のない日数のエントリを作成しているため、毎日効率的にこれを行うのに苦労しています(考えてみてください)値を測定し、バージョン管理を行っているので、ポートフォリオの設計方法の変更を追跡できます)。

次に例を示します(株名とウェイトを含む毎日のポートフォリオ):

Day1:
ibm = 10%
microsoft = 50%
google = 40%

day5:
ibm = 20%
microsoft = 20%
google = 40%
cisco = 20%

1日目にポートフォリオの値を測定でき、5日目(変更されたとき)に再度測定する必要があることは理解できますが、データベースに1日目のエントリを再作成せずに2〜4日目を測定するにはどうすればよいですか?

今の私のアプローチ(私は好きではありません)は、誰かがポートフォリオを変更したときのためにデータベースに一時エントリを作成し、1日の終わりに一時エントリがある場合は値を計算することです。過去の日のデータを使用して、新しいエントリ(2日目から4日目)を作成します。問題は、データが変更されないことが多いため、基本的に重複するエントリを作成していることです。キャッチは次のとおりです。私の株式データはすべて毎日です。また、ポートフォリオを取得することを考えました。ポートフォリオが3日以内に更新されていない場合は、各株式の過去3日間のリターンを見つけますが、より良い解決策があるかどうかはわかりませんでした。

何か案は?これは簡単な問題だと思いますが、効率的な方法がわかりません。

注:財務面では、NAVの作成と呼ばれ、ほとんどの企業は私が行っている非効率的な方法でそれを行っていますが、プロセスは50年前のように作成され、変更されていないためです。この問題はバージョン管理と非常に似ていると思いますが、解決策を見つけることができないようです。

4

1 に答える 1

0

ストレージの観点からは、次のものを保存するのが最も理にかなっています。

UserId --StockId1 --23%-2012-06-25 UserId --StockId2 -11%-2012-06-26 UserId --StockId1 --20%-2012-06-30

つまり、在庫1が30日に下がったことがわかります。ここで、28日のStockId1のパーセンテージを知りたい場合は、次を選択します。

SELECT * 
FROM stocks 
WHERE datecolumn<=DATE(2012-06-28) 
ORDER BY datecolumn DESC LIMIT 0,1

それが何も返さない場合、あなたはそれを持っていませんでした、さもなければあなたは最後の位置を取り戻します。

ところで。たとえば、株式1のグラフが必要な場合は、日付でいっぱいのテーブルに対して結合を残すことができます。そうすれば、ギャップを簡単に埋めることができます。

たとえば、この投稿をここで見つけました:

UPDATE mytable
SET number = (@n := COALESCE(number, @n))
ORDER BY date;

SQL QUERYは、行のNULL値を以前の既知の値の値に置き換えます

于 2012-06-30T14:45:38.257 に答える