У меня возникла проблема, которая убила целый день моей жизни. Но я ее так и не решил. Конечно, может для кого-то это и не проблема, но для меня еще какая.
Как сформировать запрос, чтобы вывести строки соответствующие условиям: country = 1, currency = USD, date = самая последняя, чтобы не повторялись банки, чтобы вывелся актуальный курс именного в городе с id 1, в валюте USD.
Для правильного вопроса надо знать половину ответа
SELECT `v`.*
FROM (
SELECT `bank_id`, MAX(`date`) AS `date`
FROM `table`
WHERE `country` = :country_id AND `currency` = :currency_code
GROUP BY `bank_id`
) AS `d`
JOIN `table` AS `v`
ON `v`.`country` = :country_id AND `v`.`currency` = :currency_code
AND `v`.`bank_id` = `d`.`bank_id` AND `v`.`date` = `d`.`date`
Спасибо за быстрый ответ. До этого всё-таки пришло в голову как это решить.
Мой вариант такой:
SELECT c.* FROM course c INNER JOIN (SELECT bank_id, country, code, MAX(date) as latest FROM course WHERE country = '$country' AND code = '$code' GROUP BY bank_id) r ON c.bank_id = r.bank_id AND c.country = r.country AND c.code = r.code AND c.date = r.latest
По моему, похожие запросы. Можно использовать мой, или ваш создаст меньшую нагрузку?
v7resspect: Нагрузку проверять надо. MySQL иногда весьма своеобразно оптимизирует запросы, так что даже порядок сравнений во WHERE или ON может повлиять на скорость.