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;