Только уже указанный вариант с подзапросом возможен, так как нет возможности использовать группировку и не участвующие в группировке или неаггрегированные поля. Единственное что, выгоднее будет использовать первичный ключ для JOIN
SELECT n.* FROM course n
JOIN (SELECT MAX(created_at) created_at FROM course GROUP BY currency) m
USING(created_at)
Одним запросом, судя по explain,
значительно дороже будет такой запрос
SELECT n.* FROM course n
LEFT JOIN course m
ON n.currency = m.currency AND n.created_at < m.created_at
WHERE m.id IS NULL