毎日の株価(始値、高値、安値、終値、出来高)で構成される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クエリを使用するのではなく、上記を1つのSELECT内にまとめることはできますか?
スキーマを理解するためのテーブルのcreateステートメントは次のとおりです。
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$$
更新:nullはありません。休日/週末がある場合は常に、テーブルにはその日付のレコードがありません。