Задача по Mysql: выбор последних имеющихся валют

Задали интересную задачу по MySQL.

Есть БД с курсами валют за определенный день


CREATE TABLE  `test` (
    `id` int(11) NOT NULL auto_increment,
    `date` date NOT NULL,
    `currency` varchar(3) NOT NULL,
    `value` int(11) NOT NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM ;

INSERT INTO `test` (`id`, `date`, `currency`, `value`) VALUES
(1, '2011-05-02', 'rur', 183),
(2, '2011-05-01', 'rur', 124),
(3, '2011-04-15', 'usd', 123),
(4, '2011-05-01', 'usd', 14),
(5, '2011-04-02', 'rur', 1),
(6, '2011-04-01', 'usd', 2);


Требуется выбрать курсы всех имеющихся в БД валют за последние имеющиеся даты.
Т.е. в данном случае должны быть выбраны следующие данные:
--------------------------
1 | 2011-05-02 | rur | 183
4 | 2011-05-01 | usd | 14
--------------------------

Данное действие можно сделать спомощью следующего запроса:


SELECT t2.currency, t2.value
FROM (
    SELECT MAX(date) AS date, currency
    FROM test
    GROUP BY currency
) t1
JOIN test t2 ON t1.date = t2.date AND t1.currency = t2.currency

Т.е. внутренним запросом мы выбираем имеющиеся виды валют и с их последними датами.
Внешним запросом выбираем соответствующие валютам и датам курсы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *