我需要从具有一行的另一个表中减去具有多个记录的表中的第一行。一个表的资产带有一个日期,另一个表的多个资产则按较早的日期分组。我还将结果限制为新资产大于旧资产的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
“资产”列定义为Number(12,0)。
我希望查询产生没有空值的列PID,CONAME,SEQ,VALMO,VALYR,ASSETS和计算列PERCENTDIFF。
第一个查询会产生空值,并且还会从pen_plans中减去pen_plans_archive中的每个资产数字,这不是我所需要的。
答案 0 :(得分:0)
您只是尝试执行Top功能吗?
Select TOP 1 <column>