Как показать постепенные изменения в SQL - PullRequest
2 голосов
/ 21 октября 2019

У меня есть таблица sql (Presto), которая содержит данные о различных видах птиц. Таблица содержит информацию о том, как часто разные виды наблюдались в парке в разные месяцы. Некоторые виды не наблюдались в определенные месяцы, но измерения проводились только на 07-9-19, 08-10-19 и 05-11-19. Пример данных будет выглядеть следующим образом:

Species        Period     Total (Cumulative) Observations (TCO)

Bird1           07-9-19            33
Bird1           08-10-19           45
Bird1           05-11-19           60
Bird2           07-9-10            20
Bird3            ....            ....
Bird3            ....            ....
....             ....            ....

. Я хотел бы добавить в эту таблицу новый столбец, в котором фиксируются постепенные изменения между двумя днями измерения для каждого вида. На основе примера примера я хотел бы получить следующий результат:

Species        Period            TCO        Change

Bird1           07-9-19            33          33
Bird1           08-10-19           45          12
Bird1           05-11-19           60          15
Bird2           07-9-10            20          20
Bird3           08-10-19           5           5
Bird3           05-11-19           24          19
....             ....            ....

Я думаю, что нашел способ сделать это , но это довольно сложно и включает созданиеновый столМне было интересно, есть ли более простое решение моей проблемы (так как это немного проще, чем проблема в ссылке).

1 Ответ

1 голос
/ 21 октября 2019

Вы можете использовать оконную функцию lag() для восстановления предыдущей ТСО для того же вида по периодам:

select 
    t.*,
    tco - lag(tco, 1, 0) over(partition by species order by period) change
from mytable

Форма отставания с тремя аргументами позволяет вам указатьзначение по умолчанию вместо null: согласно ожидаемому результату вы хотите 0 в этом случае.

...