Ten problem jest dość powszechny. Potrzebujesz podzapytania, aby wyrzucić maksymalny znacznik czasu i identyfikator typu rate (który jest podstawą grupowania), a następnie wybierz wszystko inne z wewnętrznego sprzężenia wierszy tego podzapytania i wszystko inne.
Dla 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