我有一个 MySql 表,其中包含每日股票报价(开盘价、最高价、最低价、收盘价和成交量),我试图将其动态转换为每周数据。到目前为止,我有以下函数,它适用于高点、低点和音量:
SELECT MIN(_low), MAX(_high), AVG(_volume),
CONCAT(YEAR(_date), "-", WEEK(_date)) AS myweek
FROM mystockdata
GROUP BY myweek
ORDER BY _date;
我需要在上述查询中选择 _open 的第一个实例。因此,例如,如果星期一(在特定的一周内)有假期并且股票市场在星期二开市,则 _open 值应该从分组到其周的星期二中选择。同样,收盘价应该是该周的最后一个 _close。
是否可以在 MySql 中选择类似 FIRST() 和 LAST() 的内容,以便将上述内容包含在单个 SELECT 中,而不是使用嵌套的选择查询?
这是我的表的创建语句,以了解架构:
delimiter $$
CREATE TABLE `mystockdata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`symbol_id` int(11) NOT NULL,
`_open` decimal(11,2) NOT NULL,
`_high` decimal(11,2) NOT NULL,
`_low` decimal(11,2) NOT NULL,
`_close` decimal(11,2) NOT NULL,
`_volume` bigint(20) NOT NULL,
`add_date` date NOT NULL,
PRIMARY KEY (`id`),
KEY `Symbol_Id` (`symbol_id`,`add_date`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8$$
更新:没有空值,只要有假期/周末,该表不包含该日期的任何记录。