Задали интересную задачу по 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
Т.е. внутренним запросом мы выбираем имеющиеся виды валют и с их последними датами.
Внешним запросом выбираем соответствующие валютам и датам курсы.