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

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

year                             indicator_id
--------------------------      ---------------
January 1, 1999, 12:00 AM             1
January 1, 2000, 12:00 AM             1
January 1, 2001, 12:00 AM             1
January 1, 2006, 12:00 AM             1

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

year                             indicator_id           Diff
--------------------------      ---------------        ------
January 1, 1999, 12:00 AM             1                  0
January 1, 2000, 12:00 AM             1                  1
January 1, 2001, 12:00 AM             1                  1
January 1, 2006, 12:00 AM             1                  5

Я пробовал следующий запрос, но он просто возвращает ту же строку с разницей в 0

SELECT indicator_id, 
       year, 
       year - lag(year) over (order by year) as Diff
FROM education_data

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

1 Ответ

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

, чтобы найти случаи, когда разница составляет не более 3 лет.

Если это то, что вы хотите, используйте подзапрос, чтобы получить предыдущее значение и отфильтровать внешнее запрос:

select ed.*
from (select ed.*, lag(year) over (order by year) as prev_year
      from education_data ed
     ) ed
where prev_year >= year - interval '3 year';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...