Я пытаюсь определить повторное назначение пациента.Я хотел бы получить список встреч, сгруппированных по пациентам и дате, любых встреч, которые они имели в тот день, и какие встречи они могли иметь после этого конкретного дня.Если после этого дня у них было еще одно посещение, это считается повторным назначением.
Таблица назначений выглядит следующим образом:
ApptID: первичный ключ
PatientID: идентификатор IDPatient
ScheduleDate: Время, когда состоялась встреча.
ApptStatus: 3 для завершения, 4 для запланированного.Это может быть посторонним, потому что я хочу искать одну завершенную встречу, которая происходит после другой завершенной встречи, а также запланированные встречи, но я оставил это здесь для ясности.
Это мой запрос до сих пор:
SELECT
a.PatientID,
a.ScheduleDate AS CompletedAppointment,
MIN(futureappt.ScheduleDate) AS NextAppointment,
CASE
WHEN MIN(futureappt.ScheduleDate) IS NULL THEN 0
ELSE 1
END AS CountPatsReappointed,
1 AS CountPatsSeen
FROM
`appointments` a
LEFT JOIN
(
SELECT
fa.PatientID
, fa.ScheduleDate AS ScheduleDate
FROM
`appointments` fa
WHERE
fa.ScheduleDate > NOW()
GROUP BY
fa.PatientID
, fa.ScheduleDate
)
futureappt
ON
futureappt.PatientID = a.PatientID
WHERE
a.ApptStatus = 3
GROUP BY
a.PatientID
, a.ScheduleDate
, futureappt.ScheduleDate
Данные, схема и моя попытка это в этой скрипке .
Фактический результат (используя этот идентификатор пациента в качестве примера)
ApptID PatID CompletedApp Next Reapp PatSeen
269584 3144 2018-05-25T10:30:00Z (null) 0 1
269826 3144 2018-05-29T14:45:00Z (null) 0 1
Ожидаемый результат.Обратите внимание, как отображается следующая встреча, таким образом, считая повторную встречу:
ApptID PatID CompletedApp Next Reapp PatSeen
269584 3144 2018-05-25T10:30:00Z 2018-05-29T14:45:00Z 1 1
269826 3144 2018-05-29T14:45:00Z (null) 0 1
Как можно переписать запрос для достижения указанных выше результатов?