0

我有一张 postgresql 表,用于存储来自不同站点的一些故事。在这张桌子上,我得到了 story_id 和 site_id 字段。其中story_id 是主键,site_id 是我从中获取这个故事的站点的ID。

我需要从这个表中选择最新的 30 个添加的故事。但我不想从同一个站点获得超过 2 个故事......

所以,如果我有这样的事情:

story_id  | site_id
    1     |    1
    2     |    1
    3     |    2
    4     |    1
    5     |    3

我的结果必须是:story_ids = 1,2,3,5!
必须跳过 4,因为我已经选择了 2 个 site_id 为 1 的 id。

4

1 回答 1

2
select story_id,
       site_id 
from (
   select story_id,
          site_id,
          row_number() over (partition by site_id order by story_id desc) as rn
   from the_table
) t
where rn <= 2
order by story_id desc
limit 30

如果您想要“每组”多于或少于 2 个条目,则必须调整外部 where 子句中的值。

于 2012-06-27T12:50:54.353 回答