2012-06-27 63 views
0

我有一個postgresql表,我從不同的網站存儲一些故事。 在這張桌子上,我收到了story_id和site_id字段。 其中story_id是主鍵,site_id是我從中獲得該故事的網站的ID。Postgresql選擇限制相等的值?

我需要從此表中選擇最近30個添加的故事。 但我不想獲得超過2層,從同一網站...正在添加

所以,如果我有這樣的事情:

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

我的結果一定是:story_ids = 1,2,3, 5!
4如果你想「每組」多於或少於2項必須在where子句中的外部調整值必須跳過,因爲我已經挑2個IDS與SITE_ID 1

+0

請定義「最新」。沒有類似日期的字段(或序列號)沒有「最新的」 – wildplasser

+0

latest = ORDER BY story_id DESC 我寫了5個條目,在我的表中有幾千條。 – Svetoslav

+0

= =具有最大story_id的(30)故事。 – wildplasser

回答

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 

+0

是的,這工作完美! 謝謝,在分區的一個小小的錯過命令必須設置爲DESC。 謝謝! – Svetoslav

+0

@Svetlio:我不確定。更正 –