Этот ответ предполагает, что у вас есть уникальный идентификатор для каждого комментария, и это число увеличивается. То есть более поздние сообщения имеют более высокие номера, чем более ранние сообщения. Не должно быть последовательным, просто должно соответствовать порядку ввода.
Сначала выполните запрос, извлекающий максимальный идентификатор комментария, сгруппированный по идентификатору записи.
Примерно так:
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
Это даст вам список идентификаторов постов и самый высокий (последний) идентификатор комментария для каждого.
Затем вы присоединитесь к этому, чтобы извлечь оставшиеся данные из комментариев для этих идентификаторов.
SELECT C1.*, C2.PostID
FROM Comments AS C1
INNER JOIN (
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
) AS C2 ON C1.CommentID = C2.MaxCommentID
Затем вы присоединяетесь к сообщениям, чтобы получить информацию об этих сообщениях.
SELECT C1.*, P.*
FROM Comments AS C1
INNER JOIN (
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
) AS C2 ON C1.CommentID = C2.MaxCommentID
INNER JOIN Posts AS P ON C2.PostID = P.ID
Альтернативный подход вообще не использует PostID внутреннего запроса. Во-первых, выберите максимальный идентификатор комментария для всех уникальных постов, но не важно, какой пост, мы знаем, что он уникален.
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
Затем выполните предложение IN, чтобы получить оставшиеся данные для этих комментариев:
SELECT C1.*
FROM Comments
WHERE C1.ID IN (
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
)
Тогда просто присоединяйтесь к сообщениям:
SELECT C1.*, P.*
FROM Comments AS C1
INNER JOIN Posts AS P ON C1.PostID = P.ID
WHERE C1.ID IN (
SELECT MAX(ID) AS MaxCommentID
FROM Comments
GROUP BY PostID
)