У меня есть таблица MySql, состоящая из ежедневных котировок акций (open, high, low, close и volume), которые я пытаюсь преобразовать в еженедельные данные "на лету". До сих пор у меня есть следующая функция, которая работает для максимумов, минимумов и объема:
SELECT MIN(_low), MAX(_high), AVG(_volume),
CONCAT(YEAR(_date), "-", WEEK(_date)) AS myweek
FROM mystockdata
GROUP BY myweek
ORDER BY _date;
Мне нужно выбрать первый экземпляр _open в вышеприведенном запросе. Так, например, если в понедельник был выходной (в конкретную неделю), а фондовый рынок открылся во вторник, то стоимость открытия должна быть выбрана со вторника, который сгруппирован на его неделю. Точно так же близкое значение должно быть последним с этой недели.
Можно ли выбрать что-то вроде FIRST() и LAST() в MySql, чтобы вышеупомянутое могло быть обернуто внутри одного 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$$
Обновление: нет нулей, где есть праздник/выходные дни, таблица не несет никакой записи за эту дату.