Мне нужно вычесть верхнюю строку в таблице с несколькими записями из другой таблицы с одной строкой. В одной таблице есть активы с одной датой, а в другой - несколько активов, сгруппированных по более ранним датам. Я также ограничиваю результаты случаями, когда более новый актив превышает 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_archive" из активов в "pen_plans". Я пытался объединить что-то вроде этого в подзапросе в вышеприведенном:
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
Определение столбца "активы" - это число (12,0).
Я ожидаю, что запрос выдаст столбцы PID, CONAME, SEQ, VALMO, VALYR, ASSETS и вычисляемый столбец PERCENTDIFF без нулевых значений.
Первый запрос выдает нулевые значения, а также вычитает все цифры активов в pen_plans_archive из pen_plans, а это не то, что мне нужно.