如何选择使用SQL创建最新评论的帖子?

问题描述 投票:1回答:1

我具有要发布的外键(post_id)的表postcomment。我想获得100个“凹凸点排序”的帖子。首先创建最新评论条目的帖子条目。我的第一次尝试是:

SELECT * FROM post WHERE id IN
(
    SELECT DISTINCT post_id FROM comment
    ORDER BY created_time DESC
    LIMIT 100
);

返回:ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list

第二次尝试:

SELECT * FROM post WHERE id IN
(
    SELECT post_id from
    (SELECT DISTINCT(post_id), posted FROM comment) AS c
    ORDER BY c.created_time DESC
    LIMIT 100
);

这次没有错误,但没有执行我想要的操作。如何使SQL执行我想要的工作?

sql postgresql join greatest-n-per-group
1个回答
1
投票

[如果您要选择具有最新评论的100条帖子,则可以使用汇总:

select p.id, p.title, p.author
from posts p
inner join comments c on c.post_id = p.id
group by p.id, p.title, p.author
order by max(c.created_at) desc
limit 100

使用这种技术,您需要枚举要在posts子句中的结果集中看到的所有selectgroup by子句中。

另一种选择是预先聚合:

select p.*
from posts p
inner join (
    select post_id, max(created_at) max_created_at
    from comments 
    group by post_id 
    order by max(created_at) desc
    limit 100
) c on c.post_id = p.id
order by c.max_created_at desc
© www.soinside.com 2019 - 2024. All rights reserved.