2012-03-08 107 views
0

我在我的PostgreSQL數據庫下面的表格(trunc'ed爲簡單起見)的數量:查詢來限制基於日期每記錄結果

Person (id, name) 
Book (id, person_id, title, check_out_date) 

我需要一個查詢,將只返回最近的三本書籍是基於每個人的check_out_date。換句話說,如果一個人有5本書,我只希望查詢返回3個最近的書記錄。

更新:由於存在一些混淆,讓我澄清。如果我的Postgresql數據庫有100個人的記錄,我想看每個人的書記錄,限制每人返回3本書的內容。所以,如果一個人有5本書,我只想要查詢中返回的前3個。

回答

1

您可以使用與被人降選擇本本的順序和where書是前3名。

with tmp as (
    select 
    b.id, 
    b.person_id, 
    b.title, 
    b.check_out_date, 
    row_number() over (partition by b.person_id order by b.check_out_date desc) as order_pos 
    from 
    book b 
) 
select 
    t.id, 
    t.person_id, 
    t.title, 
    t.check_out_date 
from 
    tmp t 
where 
    t.order_pos <= 3 
; 
從這些選擇