2012-06-27 2 views
0

다른 사이트의 일부 스토리를 저장하는 하나의 postgresql 테이블이 있습니다. 이 표에서 story_id 및 site_id 필드가 있습니다. 여기서 story_id는 기본 키이고 site_id는이 이야기를 가져온 사이트의 ID입니다.한계 값이 동일한 Postgresql을 선택 하시겠습니까?

나는이 테이블에서 최근에 추가 된 30 개의 이야기를 선택하여 SELECT를해야합니다. 나는 이런 식으로 뭔가가있는 경우 하지만 2 개 이상 이야기 같은 사이트에서오고 싶어하지 말아 ...

그래서 :

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

내 결과

은 다음과 같아야합니다 story_ids = 1,2,3, 5! 이미 사이트 ID 1

+0

"최신"을 정의하십시오. 날짜와 같은 필드 (또는 시퀀스 번호)가 없으면 "최신"이 없습니다. – wildplasser

+0

최신 = 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 

와 2 개 ID를 포착했기 때문에 당신이 어디에 절 외부에서 값을 조정해야 "그룹 당"보다 많거나 적은 2 개 항목을 원하는 경우에
(4)는 생략해야합니다.

+0

예, 완벽하게 작동했습니다. 감사합니다. 파티션에서 하나의 작은 부분 만 DESC로 설정해야합니다. 감사합니다. – Svetoslav

+0

@Svetlio : 나는 그것에 대해 확신하지 못했습니다. 수정 됨 –