You don't say what DB you are using. Yes, it makes a lot of difference when making UPDATE queries. The syntax used depends a *LOT* on the DB you use.
For SQL Server, something like this:
SET rate = T2.rate
FROM table1 AS T1,
table2 AS T2,
( SELECT name, MAX(date) AS mdate FROM table2 GROUP BY name ) AS T3
WHERE T2.name = T3.name
AND T2.date = T3.mdate
AND T1.name = T2.name
*NOT* tested! Feels right, but no point in going further until you tell us what DB you are using.