选择计算列中的顶行

问题描述 投票:0回答:1

我需要从另一个具有一行的表中删除具有多个记录的表中的顶行。一个表具有一个日期的资产,另一个表具有按较旧日期分组的多个资产。我也将结果限制在较新资产大于旧资产的40%或低于40%的时间。

我已经尝试使用row_number函数从第二个表中拉出顶行,但是我遇到了子查询的问题。

Select 
    p.pid, e.coname, p.seq, p.valmo, p.valyr, p.assets,
    (case 
        when ((p.assets-p1.assets)/p.assets) * 100 <= -40 
             or ((p.assets-p1.assets)/p.assets) * 100 >=40
             and p.assets <> p1.assets
           then ((p.assets - p1.assets) / p.assets) * 100 
     end) as "PercentDiff"
from 
    pen_plans p
join 
    pen_plans_archive p1 on p.pid = p1.pid and p.seq = p1.seq
join 
    entities e on p.pid = e.pid
where 
    p.assets > 500000 and e.mmd = 'A'
order by 
    VALYR desc

所以我需要从“pen_plans”中的资产中减去“pen_plans_archive”中的顶行。我试图在子查询中将这样的东西组合到上面:

select assets from (select assets row_number() over (partition by assets 
order by valyr DESC) as R
from pen_plans_archive) RS
where R=1 order by valyr DESC

“assets”列定义为Number(12,0)。

我希望查询生成列,PID,CONAME,SEQ,VALMO,VALYR,ASSETS和没有空值的计算列PERCENTDIFF。

第一个查询产生空值,并且还从pen_plans中减去pen_plans_archive中的每个资产数字,这不是我需要的。

sql oracle greatest-n-per-group
1个回答
0
投票

你只是想尝试做Top功能吗?

Select TOP 1 <column>

© www.soinside.com 2019 - 2024. All rights reserved.