2012-03-08 68 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 
; 
从这些选择