Получите разницу между 2 полями, используя SQL - PullRequest
1 голос
/ 29 апреля 2020

Уважаемые, у меня есть такая таблица:

day            Cases
29/04/2020      1123
28/04/2020      1090
27/04/2020      908

Я хочу получить разницу между количеством дел за последние 2 дня.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2020

Функция LAG() создает значение предыдущей строки в соответствии с указанными критериями упорядочения.

Вы можете использовать его, как показано ниже:

select t.*, cases - lag(cases) over(order by day) as diff from t
0 голосов
/ 29 апреля 2020

Вы можете использовать:

select t.cases - tprev.cases
from t join
     t tprev
     on t.day = trunc(sysdate) and tprev.day = trunc(sysdate - 1);

Вы можете быть впечатлены производительностью, если у вас есть индекс на (day).

0 голосов
/ 29 апреля 2020

Я хочу получить разницу между количеством дел за последние 2 дня

Вы можете использовать оконные функции и агрегирование:

select 
    max(case when rn = 1 then cases end) 
        - max(case when rn = 2 then cases end) case_diff
from (
    select cases, row_number() over(order by day desc) rn
    from mytable
) t
where rn <= 2

В подзапрос, row_number() ранжирует строки по убыванию day; затем внешний запрос фильтрует последние две строки и использует условные выражения, чтобы получить разницу между последним значением и предыдущими значениями cases.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...