A simply group by should do the same thing (if I understood your query correctly.
select tp.id as tpid,
max(tp.name) as desc,
count(*) as count,
max(t.date) as date
from topicparam tp
join topic t on t.topicparam_id = tp.id
group by tp.id;
Btw: date
is a horrible name for a column. For one reason because it's also a reserved word, but more importantly because it does not document what the column contains. A "start date", an "end date", a "due date", a "recording date", a "publish date", ...?