この回答は、コメントごとに一意の識別子があり、番号が増加していることを前提としています。つまり、後の投稿は以前の投稿よりも数字が高い。シーケンシャルである必要はなく、入力の順番に対応する必要があります。
まず、投稿IDでグループ化された最大のコメントIDを抽出するクエリを実行します。
このような何か:
SELECT MAX(ID) MaxCommentID, PostID
FROM Comments
GROUP BY PostID
これはあなたのポストのidの、各1の最高(最新)コメントIDのリストが表示されます。
次に、これらのIDについて、コメントから残りのデータを抽出するためにこれに参加します。
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を使用しません。最初に、すべてのユニークな投稿の最大のコメントIDを選んでください。ただし、どの投稿がユニークであるかを気にしません。
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
)
投稿が必然的にコメントを使用している場合は左外部結合を使用していない場合は投稿とコメントの間に内部結合 – u07ch