If you had a table which just contained the most recent entry for each parent, and the parent's id, then it would be easy, right?
You can make a table like that by joining the child table on itself, taking only the maximum datestamp for each parent id. Something like this (your SQL dialect may vary):
SELECT t1.*
FROM child AS t1
LEFT JOIN child AS t2
ON (t1.parent_id = t2.parent_id and t1.datestamp < t2.datestamp)
WHERE t2.datestamp IS NULL
That gets you all of the rows in the child table for which no higher timestamp exists, for that parent id. You can use that table in a subquery to join to:
SELECT *
FROM parent
JOIN ( SELECT t1.*
FROM child AS t1
LEFT JOIN child AS t2
ON (t1.parent_id = t2.parent_id and t1.datestamp < t2.datestamp)
WHERE t2.datestamp IS NULL ) AS most_recent_children
ON (parent.id = most_recent_children.parent_id
or join the parent table directly into it:
SELECT parent.*, t1.*
FROM parent
JOIN child AS t1
ON (parent.id = child.parent_id)
LEFT JOIN child AS t2
ON (t1.parent_id = t2.parent_id and t1.datestamp < t2.datestamp)
WHERE t2.datestamp IS NULL