MySQL检索Group的最新记录

geo*_*310 6 mysql sql group-by greatest-n-per-group

我有一个社交网站,我正在努力查询.我有一个帖子表,其中包含所有用户帖子,然后是一个post_comments表,其中包含帖子上的所有评论.我试图通过post_comments表中的帖子找到最新评论.post_comments表包含以下列:

post_comment_id,post_id,writer_user_id,post_comment_content,datetime

我按照post_id对结果进行了分组,如下所示:

SELECT * FROM post_comments GROUP BY post_id
Run Code Online (Sandbox Code Playgroud)

这几乎可以实现我想要的但它总是返回每个帖子最旧的评论,而不是最新的评论.如何让它返回每篇帖子的最新评论?

ale*_*xis 16

GROUP BY旨在与聚合函数一起使用,否则它会随意选择每组一行.您的解决方案(上面和你的自我的答案)的作品,因为MySQL的似乎要保持每个组的第一行,但你不能保证,这总是会发生.

您可以post_id像这样获得每个评论的最新评论日期.

select post_id, MAX(datetime) as latest from post_comments group by post_id
Run Code Online (Sandbox Code Playgroud)

用它来选择最新的评论:

SELECT t1.* FROM post_comments AS t1
JOIN (
    SELECT post_id, MAX(datetime) AS latest FROM post_comments GROUP BY post_id
) AS t2
ON t1.post_id = t2.post_id AND t1.datetime = t2.latest
Run Code Online (Sandbox Code Playgroud)


geo*_*310 -3

排序了!我是这样做的:

SELECT * FROM (
    SELECT * FROM post_comments ORDER BY datetime DESC
) AS post_comments 
GROUP BY post_id
Run Code Online (Sandbox Code Playgroud)