Sql 在另一列为max的列上联接表
在PostgreSQL中,我试图在第一个选择列表中选择具有最新ff.sub_日期的列。ff表中唯一的值是object_id,这是我需要连接的对象。我的尝试如下: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
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