Добрый день, мучаюсь с запросом на выборку данных из таблицы сделок, нужно выбрать сгруппированные данные по контрактам, например последняя сделка, лот в последней, время последней, первая сделка, максимальная, минимальная и.т.д вот схема таблицы:
CREATE TABLE `USERS_TRANSACTIONS` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`CONTRACT_ID` TINYINT UNSIGNED NOT NULL,
`TYPE` ENUM('BUY','SELL') NOT NULL,
`PRICE` SMALLINT UNSIGNED NOT NULL,
`AMOUNT` SMALLINT UNSIGNED NOT NULL,
`TIME` TIME NOT NULL,
`NUMBER` TINYINT UNSIGNED NOT NULL,
PRIMARY KEY (`ID`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
Сам додумался пока только до такого запроса:
SELECT
`CONTRACT_ID` AS `CONTRACT`,
(SELECT `PRICE` FROM USERS_TRANSACTIONS ORDER BY `ID` DESC LIMIT 1) AS `LAST`,
(SELECT `AMOUNT` FROM USERS_TRANSACTIONS ORDER BY `ID` DESC LIMIT 1) AS `LOT`,
(SELECT `TIME` FROM USERS_TRANSACTIONS ORDER BY `ID` DESC LIMIT 1) AS `TIME`,
`PRICE` AS `OPEN`,
MAX(PRICE) AS `HIGH`,
MIN(PRICE) AS `LOW`,
SUM(NUMBER) AS `DEALS`,
SUM(AMOUNT) AS `CONTRACTS` FROM USERS_TRANSACTIONS GROUP BY `CONTRACT_ID`
Но он начинает работает не корректно по отношению к выборке последних сделок,лотов и времени если в таблицы оказывается несколько видов контрактов(в последние сделки запрос пишет просто последние записи по ID и не важно какому контракту принадлежит сделка), помогите решить эту проблему, сойдет решение любой сложности (в пределах разумного конечно) так как запрос будет выполнятся всего лишь один раз, при запуске сервера.
Отредактированно simple (14.02.2012 18:04:52)