Выбор верхней строки в вычисляемом столбце - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно вычесть верхнюю строку в таблице с несколькими записями из другой таблицы с одной строкой. В одной таблице есть активы с одной датой, а в другой - несколько активов, сгруппированных по более ранним датам. Я также ограничиваю результаты случаями, когда более новый актив превышает 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, а это не то, что мне нужно.

1 Ответ

0 голосов
/ 29 марта 2019

Вы просто пытаетесь выполнить функцию Top?

Select TOP 1 <column>

...