Sql 对于某个groupid列的每个唯一值,如何获取最后3个日期的行?

Sql 对于某个groupid列的每个唯一值,如何获取最后3个日期的行?,sql,postgresql,greatest-n-per-group,window-functions,Sql,Postgresql,Greatest N Per Group,Window Functions,我有一个表格,有以下列:fileing\u ID、DATE和BLAH 我正在尝试编写一个查询,对于每个归档ID,返回最后三个日期的行。如果表格为: FILING_ID DATE aksjdfj 2/1/2006 b 2/1/2006 b 3/1/2006 b 4/1/2006 b 5/1/2006 我想: FILING_ID DATE

我有一个表格,有以下列:
fileing\u ID
DATE
BLAH

我正在尝试编写一个查询,对于每个
归档ID
,返回最后三个日期的行。如果表格为:

   FILING_ID   DATE    
     aksjdfj   2/1/2006
           b   2/1/2006
           b   3/1/2006
           b   4/1/2006
           b   5/1/2006
我想:

   FILING_ID   DATE    
     aksjdfj   2/1/2006
           b   3/1/2006
           b   4/1/2006
           b   5/1/2006
我在想,也许可以运行一些查询,找出每个
归档ID
的第三高日期,然后进行连接并将截止日期与
日期进行比较

我使用PostgreSQL。有什么方法可以使用限制吗

SELECT filing_id, date  -- more columns?
FROM  (
   SELECT *, row_number() OVER (PARTITION BY filing_id ORDER BY date DESC NULLS LAST) AS rn
   FROM   tbl
   ) sub
WHERE  rn < 4
ORDER  BY filing_id, date;  -- optionally order rows
如果没有
归档
表,可以创建一个。或者在运行中推导:


非常感谢!小小的打字错误,rn还没有定义,但我想是我自己弄明白的。再次感谢!行号()、分区等。。。我正在缓慢但肯定地扩展我的SQL工具包!
SELECT f.filing_id, t.*
FROM   filing f  -- table with distinct filing_id
     , LATERAL (
   SELECT date -- more columns?
   FROM   tbl
   WHERE  filing_id = f.filing_id
   ORDER  BY date DESC NULLS LAST
   LIMIT  3  -- now you can use LIMIT
   ) t
ORDER  BY f.filing_id, t.date;