SQL - найти две ближайшие даты после определенной даты - PullRequest
0 голосов
/ 13 ноября 2018

Уважаемое сообщество переполнения стека,

Я ищу идентификатор пациента , где две последовательные даты после самой первой - менее 7 дней.

Так что различия между 2-м и 1-м date <= 7 дней

и различия между 3-м и 2-м date <= 7 днями

Пример:

ID           Date
1          9/8/2014
1          9/9/2014
1          9/10/2014

2          5/31/2014
2          7/20/2014
2          9/8/2014

Для пациента 1 две последующие даты расположены с интервалом менее 7 дней.

Однако для пациента 2 следующие даты с интервалом более 7 дней (50 дней).

Я пытаюсь написать запрос SQL, который просто выводит идентификатор пациента "1".

Спасибо за вашу помощь:)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы хотите использовать lead(), но это сложно, потому что вы хотите это только для первых трех строк. Я думаю, я бы пошел на:

select t.*
from (select t.*,
             lead(date, 1) over (partition by id order by date) as next_date,
             lead(date, 2) over (partition by id order by date) as next_date_2,
             row_number() over (partition by id order by date) as seqnum
      from t
     ) t
where seqnum = 1 and
      next_date <= date + interval '7' day and
      next_date2 <= next_date + interval '7' day;
0 голосов
/ 13 ноября 2018

Вы можете попробовать использовать оконную функцию lag ()

select * from
(
select id,date,lag(date) over(order by date) as prevdate
from tablename
)A where datediff(day,date,prevdate)<=7
...