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)
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |