我有一个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。
答案 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子句中的值。