SQL запрос, чтобы найти минимальную разницу между значениями строки столбца - PullRequest
0 голосов
/ 30 мая 2020

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

У меня есть эти данные:

ID     year
1      2001
1      2001
2      2003
2      2004
2      2010
3      2000

, и мне нужен этот результат:

ID    year
1      0
2      1
3      0

Ответы [ 2 ]

1 голос
/ 30 мая 2020

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

SELECT Id,
       ISNULL(MIN(Def), 0) [Year]
FROM
(
  SELECT T.Id,
         TT.Year - T.Year Def
  FROM Data T
  LEFT JOIN Data TT ON T.Id = TT.Id AND T.Year < TT.Year
) T
GROUP BY Id;

Онлайн-демонстрация

1 голос
/ 30 мая 2020

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

select id, coalesce(min(year - prev_year), 0)
from (select t.*, lag(year) over (partition by id order by year) as prev_year
      from t
     ) t
group by id;

Здесь - скрипт db <>.

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