Разница между двумя последовательными строками по ID - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь получить разницу между двумя последовательными строками по идентификатору, две даты в разных столбцах. Я думаю, что это должно быть что-то с PARTITION BY в сочетании с получением дескриптора MAX 2, затем захватом MAX 1 asc ... хотя и немного запутывается логикой. Вот образец.

До

ID  Start_date  End_date
1   1/1/2017    2/8/2017
1   2/10/2017   3/8/2017
1   3/21/2017   3/29/2017
1   4/11/2017   5/12/2017
2   4/2/2016    4/3/2016
2   4/6/2016    5/11/2016
3   4/25/2016   4/30/2016
3   5/25/2016   6/29/2016
3   7/13/2016   7/15/2016
3   7/18/2016   8/24/2016

ПОСЛЕ

ID  Start_date  End_date    new
1   1/1/2017    2/8/2017    NULL
1   2/10/2017   3/8/2017    2
1   3/21/2017   3/29/2017   13
1   4/11/2017   5/12/2017   13
2   4/2/2016    4/3/2016    NULL
2   4/6/2016    5/11/2016   3
3   4/25/2016   4/30/2016   NULL
3   5/25/2016   6/29/2016   25
3   7/13/2016   7/15/2016   14
3   7/18/2016   8/24/2016   3

1 Ответ

0 голосов
/ 28 июня 2018

Используйте функцию lag , чтобы получить предыдущее значение и использовать его в datediff.

select t.*,datediff(day,lag(end_date) over(partition by id order by start_date),start_date) as diff
from tbl t

LAG обеспечивает доступ к строке с заданным физическим смещением, предшествующим текущей строке. Используйте эту аналитическую функцию в операторе SELECT для сравнения значений в текущей строке со значениями в предыдущей строке.

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