考虑以下三个表:
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 日之间的一组连续日期。在同一时期,stocks
包含 100 只股票的价格open
和close
定价信息。股票/公司在companies
.
在周末2011-03-12
和2011-03-13
节假日期间(例如2011-03-17
),没有可用的定价信息。
我需要的是一个包含每个日期open
的列表和close
定价信息。每当有一个in中没有定价信息时,必须填写最后一个已知的定价信息。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 会快很多。
任何帮助表示赞赏:-)