How about using LAST_VALUE() ?
SELECT
Country,
LAST_VALUE(Date) OVER (PARTITION BY Country ORDER BY Date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Last_Date,
LAST_VALUE(Rate) OVER (PARTITION BY Country ORDER BY Date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS Last_Rate
FROM my_tab;