Как найти самую старую запись в группе, используя Postgresql? - PullRequest
3 голосов
/ 15 июня 2011

Рассмотрим следующий набор данных в таблице «book» (group_id, title, check_out_date):

> 1 - "Moby Dick" - 2010-01-01
> 1 - "The Jungle Book" - 2011-05-05
> 1 - "Grapes of Wrath" - 1999-01-12
> 2 - "Huckleberry Finn" - 2000-01-05
> 2 - "Tom Sawyer" - 2011-06-12

Мне нужно написать запрос, который будет возвращать запись с самым старым значением "check_out_date" из каждой группы (Группа 1 и Группа 2). Это должно быть довольно просто - я просто не знаю, как это сделать.

Ответы [ 2 ]

7 голосов
/ 15 июня 2011

Я думаю, тебе нужно что-то подобное.

 select group_id, title, check_out_date from book b1 
       where
       check_out_date = 
       (select MIN(check_out_date) 
       from book b2 where b2.group_id =  b1.group_id)
3 голосов
/ 16 июня 2011

Теперь, когда postgres поддерживает оконные функции.

SELECT group_id, title, checkout_date) FROM
 (SELECT group_id, 
  title, 
  checkout_date, 
  rank() OVER (PARTITION BY group_id ORDER BY checkout_date) AS rk
 ) AS subq
WHERE rk=1;

Возможно, вы хотите индекс на (group_id, checkout_date), возможно, наоборот.Я не постучал в окна достаточно, чтобы знать, что пытается сделать планировщик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...