Вычисление процента между последовательными строками на основе идентификатора в SQL? - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь вычислить и найти самые большие процентные изменения между датами на основе indicator_id

year                             indicator_id                 value
--------------------------      ---------------              -------
January 1, 1999, 12:00 AM             1                       1.99
January 1, 2000, 12:00 AM             1                       1.76
January 1, 2001, 12:00 AM             2                       3.37
January 1, 2006, 12:00 AM             2                       4.59

Результат, который я пытаюсь получить:

year                             indicator_id                 value          % change
--------------------------      ---------------              -------         ---------
January 1, 1999, 12:00 AM             1                       1.99               0%
January 1, 2000, 12:00 AM             1                       1.76               ?
January 1, 2001, 12:00 AM             2                       3.37               0%
January 1, 2006, 12:00 AM             2                       4.59               ?

Пожалуйста, помогите

1 Ответ

1 голос
/ 21 июня 2020

Вы хотите lag() и некоторую арифметику c:

select t.*,
       (1 - value / nullif(lag(value) over (partition by indicator_id order by year), 0))  as ratio
from t;

Примечание. Это возвращает соотношение от 0 до 1. Если вам нужен процент, вы можете умножить его на 100.

Кроме того, первым результатом будет NULL, что для меня больше смысла, чем 0. Если вы действительно хотите 0, вы можете использовать форму с тремя аргументами lag(): lag(value, 1, value).

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