Если бы у вас была таблица, которая только что содержала самую последнюю запись для каждого родителя и идентификатор родителя, то это было бы легко, верно?
Вы можете создать такую таблицу, присоединив дочернюю таблицу к себе, взяв только максимальную дату для каждого родительского идентификатора. Примерно так (ваш диалект SQL может отличаться):
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
Это возвращает вам все строки в дочерней таблице, для которых не существует более высокой отметки времени, для этого родительского идентификатора. Вы можете использовать эту таблицу в подзапросе, чтобы присоединиться к:
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
или присоединить родительскую таблицу непосредственно к ней:
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