查询以根据日期限制每条记录的结果数

时间:2012-03-08 18:06:14

标签: sql postgresql limit

我的Postgresql数据库中有以下表格(为简单起见,截断了):

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

我需要一个查询,只会根据每人的check_out_date返回三本最新的图书。换句话说,如果一个人有5本书,我只希望查询返回3本最近的书籍记录。

更新:由于存在一些混淆,请让我澄清一下。如果我的Postgresql数据库有100个人的记录,我想查看每个人的书记录,限制每人3本书的回归。所以,如果一个人有5本书,我只想在查询中返回前3个。

1 个答案:

答案 0 :(得分:1)

您可以使用with子句按人数降序选择书籍的顺序,并从书籍排在前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
;