MySQL < 4.1 doesn’t support subqueries. The manual suggests ‘easily’ using a temporary table and a join. Here’s a solution based on joins:
SELECT node.id,node.version,node.title,node.body,node.date
FROM node INNER JOIN node AS n2 ON node.id = n2.id
WHERE node.status='publish'
GROUP BY node.id, node.version
HAVING node.version = max(n2.version)
What this should do is return node information for published nodes with the latest version (primary key(id, version)). It seems to work.