如何为每个ID选择最近的记录



我要查看一家公司同行的财务数据。我在一家特定的公司有10个同行,财务数据是定期捕获的(每月、每季度等)。但是,由于数据捕获不会同时发生,因此我最终得到了不同的最近更新日期。

我想做的是为每个同行公司ID选择最近的行,这样我的表中就只有11行了(1行代表我的公司,10行代表同行)

下面是我现在正在运行的代码

select * from Financials_table
where PRD_END_DT = (select max(PRD_END_DT) from Financials_table ) -- Selecting the latest period end date
''')
peers_df.createOrReplaceTempView('peers_df')
print(shape('peers_df'))
head('peers_df', 50)

请注意,我在peers_list中存储了一个对等点列表,并且我希望获得每个对等点的最新PRD_END_DT。现在我正在运行的返回最近的PRD_END_DT值,但并非所有对等节点都有该日期的数据。

有几种方法可以获取每个公司ID的最新行。您还没有用您的DBMS标记您的请求,因此有些方法可能适合您,而另一些方法可能还不受您的DBMS的支持。以下是一些选项:

获取每个company_id的最大prd_end_dt。然后选择匹配的行:

select *
from table 
where (company_id, prd_end_dt) in
(
select company_id, max(prd_end_dt)
from financials_table
group by company_id
)
order by company_id;

为company_id:选择不存在更新的prd_end_dt的行

select *
from financials_table ft
where not exists
(
select null
from financials_table newer
where newer.company_id = ft.company_id
and newer.prd_end_dt > ft.prd_end_dt
)
order by company_id;

实时获取最大的prd_end_dt。然后比较日期:

select *
from
(
select ft.*, max(prd_end_dt) over (partition by company_id) as max_prd_end_dt
from financials_table ft
group by company_id
) with_max_prd_end_dt
where prd_end_dt = max_prd_end_dt
order by company_id;

对每个公司的行进行排序,只保留最新的行:

select *
from financials_table
order by rank() over (partition by company_id order by prd_end_dt desc)
fetch first row with ties;

最新更新