Sql 在另一列为max的列上联接表

Sql 在另一列为max的列上联接表,sql,postgresql,Sql,Postgresql,在PostgreSQL中,我试图在第一个选择列表中选择具有最新ff.sub_日期的列。ff表中唯一的值是object_id,这是我需要连接的对象。我的尝试如下: SELECT r0.ein, "TtlRvAndExpnssAmt" AS "Revenue", "TtlAsstsEOYFMVAmt" AS "Assets", "CmpOfcrDrTrstRvAndExpnssAmt" AS "Compensation & Benefits Expense" FROM fil

在PostgreSQL中,我试图在第一个选择列表中选择具有最新ff.sub_日期的列。ff表中唯一的值是object_id,这是我需要连接的对象。我的尝试如下:

SELECT r0.ein, "TtlRvAndExpnssAmt" AS "Revenue", "TtlAsstsEOYFMVAmt" AS "Assets",
       "CmpOfcrDrTrstRvAndExpnssAmt" AS "Compensation & Benefits Expense" 
FROM filing_filing ff
JOIN return_pf_part_0 r0 ON ff.object_id = r0.object_id
JOIN return_pf_part_i r1 ON ff.object_id = r1.object_id
JOIN return_pf_part_ii r2 ON ff.object_id = r2.object_id
WHERE (ff.ein, sub_date) IN (SELECT ff.ein, max(sub_date)
                             FROM filing_filing ff
                             GROUP BY ff.ein)
  AND ff.ein = '456829368';
看起来我在子查询中真正需要的是包含列object_id,但我不能这样做,因为我不能按它分组


注意:稍后,WHERE子句将包含一个很长的ff.EIN列表

您可以这样做预筛选您的归档表吗

WITH Filing as (Select * from 
(Select object_id, sub_date, ein, DENSE_RANK() OVER (Order by SubDate desc) as drank 
from filing_filing) aa where aa.drank=1)

SELECT r0.ein, "TtlRvAndExpnssAmt" AS "Revenue", "TtlAsstsEOYFMVAmt" AS "Assets",
       "CmpOfcrDrTrstRvAndExpnssAmt" AS "Compensation & Benefits Expense" 
FROM filing ff
JOIN return_pf_part_0 r0 ON ff.object_id = r0.object_id
JOIN return_pf_part_i r1 ON ff.object_id = r1.object_id
JOIN return_pf_part_ii r2 ON ff.object_id = r2.object_id
WHERE (ff.ein, sub_date) IN (SELECT ff.ein, max(sub_date)
                             FROM filing_filing ff
                             GROUP BY ff.ein)
  AND ff.ein = '456829368';

尝试使用窗口函数(
ROW\u NUMBER()
下面使用,但如果2条记录具有相同的
子日期
,则可以选择
RANK()
):

SELECT r0.ein, "TtlRvAndExpnssAmt" AS "Revenue", "TtlAsstsEOYFMVAmt" AS "Assets",
   "CmpOfcrDrTrstRvAndExpnssAmt" AS "Compensation & Benefits Expense" 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ein ORDER BY sub_date DESC) AS RowNumber
    FROM filing_filing
) ff
JOIN return_pf_part_0 r0 ON ff.object_id = r0.object_id
JOIN return_pf_part_i r1 ON ff.object_id = r1.object_id
JOIN return_pf_part_ii r2 ON ff.object_id = r2.object_id
WHERE ff.rownumber = 1