次の 3 つのテーブルを検討してください。
daterange stocks companies
----------- ---------------------------------- ----------------
_date stock_id nyse_date open close stock_id name
----------- ---------------------------------- ----------------
2011-03-11 1 2011-03-11 40.50 40.60 1 Alcoa
2011-03-12 1 2011-03-14 40.62 41.04 2 Apple
2011-03-13 1 2011-03-15 41.00 41.20 . .
2011-03-14 1 2011-03-16 41.15 42.00 . .
2011-03-15 1 2011-03-18 41.50 41.80 100 Xerox
2011-03-16
2011-03-17
2011-03-18
daterange
には、2011 年 3 月 11 日から 9 月 1 日までの連続する一連の日付が含まれています。同じ期間のおよび100 株の価格情報stocks
が含まれています。株/会社は にあります。open
close
companies
週末2011-03-12
および2011-03-13
休暇中 (例: 2011-03-17
) は、価格情報を利用できません。
必要なのは、 の各日付のリストopen
とclose
価格情報です。に価格情報がない がある場合は常に、最新の既知の価格情報を入力する必要があります。daterange
_date
daterange
stocks
したがって、Alcoa ( stock_id 1
) の場合、与えられたdaterange
日付が与えられると、出力は次のようになります (* = 最後の既知の値から取得):
stock_id _date open close
---------------------------------
1 2011-03-11 40.50 40.60
1 2011-03-12 40.50 40.60 *
1 2011-03-13 40.50 40.60 *
1 2011-03-14 40.62 41.04
1 2011-03-15 41.00 41.20
1 2011-03-16 41.15 42.00
1 2011-03-17 41.15 42.00 *
1 2011-03-18 41.50 41.80
...実際には、その後に 9 月 1 日までのすべての日付が続き、その後stock_id
2 が続きます (例open
にclose
は示されていません)。
2 2011-03-11 10.11 10.15
2 2011-03-12 10.11 10.15 *
2 2011-03-13 10.11 10.15 *
2 2011-03-14 10.20 10.24
. .
. .
これは MySQL で可能でしょうか? 別の方法として、PHP を使用して から日付をダウンロードしdaterange
、ループしてstocks
、特定の日付のエントリがない場合に入力することもできます。しかし、MySQL の方がはるかに高速であると思います。
どんな助けでも大歓迎です:-)