我建议将您的表格分成两张不同的表格,一张用于提问,一张用于回答。
但是,您需要的查询可以这样写:
SELECT posts.*
FROM
posts INNER JOIN
(SELECT IF(ref_post_id=0,post_id,ref_post_id) as id, Max(Date) as maxdate
FROM posts
GROUP BY id) p
ON
(p.maxdate = posts.date) AND
(p.id =IF(posts.ref_post_id=0,posts.post_id,posts.ref_post_id))
要为每个问题/答案选择最大日期,您必须分组ref_post_id
,除了ref_post_id = 0
必须分组的情况post_id
,因此是 IF。
当您使用子查询将帖子表与自身连接时,您必须使用相同的技巧。
编辑:如果您需要将问题标记为已删除,则必须从上面的选择中删除所有已删除的问题和答案,并且您必须再使用一个子查询来仅选择未删除的问题:
SELECT posts.*
FROM
posts INNER JOIN
(SELECT IF(ref_post_id=0,post_id,ref_post_id) as id, Max(Date) as maxdate
FROM posts
WHERE EXISTS (SELECT null
FROM posts posts_sub
WHERE
posts_sub.post_id =
IF(posts.ref_post_id=0,posts.post_id,posts.ref_post_id)
AND posts_sub.deleted =0)
GROUP BY id) p
ON
(p.maxdate = posts.date) AND
(p.id =IF(posts.ref_post_id=0,posts.post_id,posts.ref_post_id))