基本上我來到這就像一個解決這個
1:/創建抽動值的表**確保您所創建的ID列**
CREATE TABLE price_tic (
`id` INT(10) NULL AUTO_INCREMENT,
`T` VARCHAR(3) NULL,
`SysDateTime` DATETIME NULL,
`TIC` FLOAT NULL,
`Volume` FLOAT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_bin'
ENGINE=MEMORY
ROW_FORMAT=DEFAULT
2:/下創建對於開盤價最高價最低價,成交量,OI等臨時表
CREATE TEMPORARY TABLE symbol_ohl
(ExchDate DATE,
ExchTime TIME)
ENGINE = MEMORY
AS(SELECT
DATE_FORMAT(`SysDateTime`,'%Y-%m-%d') AS ExchDate,
DATE_FORMAT(`SysDateTime`,'%H:%i:00') AS ExchTime,
DATE_FORMAT(`SysDateTime`,'%Y-%m-%d %H:%i:00') AS ExchDateTime,
`TIC` AS `OPEN`,
MAX(`TIC`) AS `HIGH`,
MIN(`TIC`) AS `LOW`,
SUM(Volume) AS `Volume`,
COUNT(`TIC`) AS `OpnInt`
FROM symbol_tic
GROUP BY ExchDateTime
ORDER BY ExchDateTime)
3:/下創建一個使用的ID號加入到自身,這樣就可以正確地訂購它的收盤價臨時表。
CREATE TEMPORARY TABLE symbol_cls
(SysDate DATE,
SysTime TIME,
ExchTime TIME)
ENGINE = MEMORY
AS(SELECT
`TIC` AS `CLOSE`,
DATE_FORMAT(`SysDateTime`,'%Y-%m-%d') AS `SysDate`,
DATE_FORMAT(`SysDateTime`,'%H:%i:00') AS SysTime,
DATE_FORMAT(`SysDateTime`,'%H:%i:00') AS ExchTime,
DATE_FORMAT(`SysDateTime`,'%Y-%m-%d %H:%i:00') AS ExchDateTime
FROM symbol_tic
INNER JOIN
(SELECT MAX(id) AS id
FROM symbol_tic
GROUP BY DATE_FORMAT(`SysDateTime`,'%Y-%m-%d %H:%i:00'))
ids ON symbol_tic.id = ids.id)
4:/最後合併產生的臨時表,我使用的是由於種種原因更換成,但你的想法
REPLACE INTO symbol_working
(`ExchDate`, `ExchTime`, `SysDate`, `SysTime`, `ExchDateTime`,
`SysDateTime`, `OPEN`, `HIGH`, `LOW`, `CLOSE`, `Volume`, `OpnInt`)
SELECT
symbol_ohl.`ExchDate` AS ExchDate,
symbol_ohl.`ExchTime` AS ExchTime,
symbol_cls.`SysDate` AS 'SysDate',
symbol_cls.`SysTime` AS 'SysTime',
symbol_ohl.`ExchDateTime` As ExchDateTime,
CONCAT(symbol_cls.`SysDate`, ' ',symbol_cls.`SysTime`) As SysDateTime,
symbol_ohl.`OPEN`,
symbol_ohl.`HIGH`,
symbol_ohl.`LOW`,
symbol_cls.`CLOSE`,
symbol_ohl.Volume AS `Volume`,
symbol_ohl.OpnInt AS `OpnInt`
FROM
(symbol_ohl JOIN symbol_cls
ON (symbol_ohl.ExchDateTime = symbol_cls.ExchDateTime))
希望這可以幫助別人。
這很快就可以運行,我在每日輸出的S & P emini上運行,運行需要幾秒鐘。