Запрос на ограничение количества результатов в записи на основе даты - PullRequest
0 голосов
/ 08 марта 2012

В моей базе данных Postgresql есть следующие таблицы (для простоты усечены):

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

Мне нужен запрос, который вернет только три самые последние книги на основе check_out_date на человека,Другими словами, если у человека есть 5 книг, я хочу, чтобы запрос только возвращал 3 самые последние записи книг.

ОБНОВЛЕНИЕ: Поскольку произошла некоторая путаница, позвольте мне уточнить.Если в моей базе данных Postgresql есть 100 записей о персонах, я хочу просмотреть записи о книгах для каждого человека, ограничив количество возвращаемых 3 книгами на человека.Итак, если у человека есть 5 книг, я хочу, чтобы в запросе были возвращены только первые 3.

1 Ответ

1 голос
/ 14 апреля 2012

Вы можете использовать предложение 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
;
...