Dit probleem komt vrij vaak voor. Je hebt een subquery nodig om de max timestamp en de ratetypeid (die de basis is voor groepering) weg te gooien en vervolgens al het andere te selecteren uit een inner join van deze subquery-rijen en al het andere.
Voor MySQL:
SELECT ratecode, rate, id, ratetypeid, date, entrytimestamp
FROM ratedefinitions,
(SELECT ratetypeid, MAX(entrytimestamp) AS max_timestamp FROM Rates
GROUP BY ratetypeid) AS inner_table
WHERE
inner_table.ratetypeid = ratetypeid
AND innertable.max_timestamp = timestamp