如何使用Postgresql查找组中最旧的记录?

时间:2011-06-15 19:32:18

标签: sql postgresql

在“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

我需要编写一个查询,该查询将返回包含每个组(组1和组2)中最早的“check_out_date”值的记录。这应该相当容易 - 我只是不知道该怎么做。

2 个答案:

答案 0 :(得分:7)

我认为你需要这样的东西。

 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)

答案 1 :(得分:3)

现在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)上的索引,反之亦然。我没有足够的窗口来了解规划师试图做什么。