Postgresql选择限制相等的值?

时间:2012-06-27 12:40:10

标签: postgresql

我有一个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,因为我已经使用site_id 1选择了2个ID。

1 个答案:

答案 0 :(得分: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子句中的值。