【发布时间】:2012-11-20 05:01:21
【问题描述】:
我有一个 IntradayPrices1Minute 表,我在其中存储 1 分钟 时间范围内股票的开盘价、最高价、最低价和收盘价:
CREATE TABLE `IntradayPrices1Minute` (
`ticker` varchar(10) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL,
`volume` mediumint(11) unsigned NOT NULL,
`open` decimal(8,4) unsigned NOT NULL,
`high` decimal(8,4) unsigned NOT NULL,
`low` decimal(8,4) unsigned NOT NULL,
`close` decimal(8,4) unsigned NOT NULL,
PRIMARY KEY (`datetime`,`ticker`),
UNIQUE KEY `indxTickerDatetime` (`ticker`,`datetime`) USING BTREE
)
我已经成功构建了一个查询,可以在其中计算这些股票的每日开盘价、最高价、最低价和收盘价。这是查询:
SELECT
ticker,
DATE(datetime) AS 'Date',
SUBSTRING_INDEX( GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1 ) as 'Daily Open',
max(GREATEST(open, high, low, close)) AS 'Daily High',
min(LEAST(open, high, low, close)) AS 'Daily Low',
SUBSTRING_INDEX( GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1 ) as 'Daily Close'
FROM
IntradayPrices1Minute
GROUP BY
ticker, date(datetime)
这是该查询成功返回的部分结果:
ticker Date Open High Low Close
---- ---------- ------ ------ ------ ------
AAAE 2012-11-26 0.0100 0.0100 0.0100 0.0100
AAAE 2012-11-27 0.0130 0.0140 0.0083 0.0140
AAAE 2012-11-28 0.0140 0.0175 0.0140 0.0165
AAAE 2012-11-29 0.0175 0.0175 0.0137 0.0137
AAMRQ 2012-11-26 0.4411 0.5300 0.4411 0.5290
AAMRQ 2012-11-27 0.5100 0.5110 0.4610 0.4950
AAMRQ 2012-11-28 0.4820 0.4900 0.4300 0.4640
AAMRQ 2012-11-29 0.4505 0.4590 0.4411 0.4590
AAMRQ 2012-11-30 0.4500 0.4570 0.4455 0.4568
现在的问题是:我想在查询中返回第七列,计算每天收盘价与前一天收盘价之间的百分比增加/减少。
我在 StackOverflow 上看到过类似的问题,但针对的是每日价格已经在表格中的情况。我认为这在我的情况下特别复杂,因为每日价格是在经过多次分组计算后在查询时获得的。
对此的任何帮助将不胜感激。 非常感谢。 博加
【问题讨论】:
-
表中
open、high、low和close列的含义是什么?例如,为什么一天中途的条目会有close值?当天每个条目的open值是否相同?high和low的值会全天变化吗?您为什么不在那个时刻只拥有一个price列?或者bid和ask列?事实上,volume持有什么:自上次记录以来的交易量?我怀疑你应该多花点时间思考一下你的架构。 -
您好 eggyval,感谢您的回答。 IntradayPrices1Minute 存储 1 分钟 时间范围内的价格变化。因此,对于每只股票,我每分钟至少有 1 笔交易。那一分钟开始时股票的价格是
open价格。那一分钟结束时的价格是close价格。volume列是在那一分钟内交易的股票数量,等等...从这 1 分钟的价格变化中,我创建了查询以获取open、low、high和close1 天 时间范围。希望您现在能更好地理解我的问题。谢谢。