Это довольно просто сделать с помощью WINDOW FUNCTIONS в Oracle.
Если ваша таблица VISITS
выглядит примерно так:
create table visits (
patient_id number,
visit_date date,
....
);
Вы можете использовать этот простой запрос:
select patient_id, visit_date,
lead(visit_date, 1, null)
over (partition by patient_id order by visit_date) as next_visit_date
from visits;
И получит в один ряд значение visit_date
и следующее значение visit_date
для того же пациента.
Затем с помощью простого, где вы можете проверить состояние вашего один год .