0

さまざまなサイトのストーリーを保存する postgresql テーブルが 1 つあります。このテーブルで、story_id フィールドと site_id フィールドを取得しました。ここで、story_id は主キーで、site_id はこの記事を入手したサイトの ID です。

このテーブルから、追加された最新の 30 のストーリーを選択して SELECT を作成する必要があります。しかし、同じサイトから2つ以上のストーリーを取得したくありません...

したがって、次のようなものがある場合:

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

私の結果は次のようになります:story_ids = 1,2,3,5!
site_id 1 の 2 つの ID を既に選択しているため、4 はスキップする必要があります。

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 に答える