Вот два альтернативных способа сделать это. Первый немного аккуратнее, а второй чуть быстрее, оба также идут с бонусом колонок в нужном вам порядке;)
WITH latest_dates
AS (SELECT country, max(dt) AS dt FROM rates GROUP BY country)
SELECT l.country, l.dt, r.rate FROM latest_dates l
LEFT JOIN rates r ON l.country=r.country AND l.dt = r.dt;
или
SELECT r.country, r.dt, r.rate
FROM rates r
LEFT OUTER JOIN rates l ON l.country = r.country AND l.dt > r.dt
WHERE l.dt IS NULL;
Вы должны заметить, что все три (эти два и код CJ) вернут слишком много строк, если для страны в один и тот же день более одной ставки, но работают для набора данных, который вы даете.