#sql #sql-server
#sql #sql-server
Вопрос:
Я работаю над небольшим приложением, которое записывает посещения пациентов на прием. У меня есть как Patient
таблица, так и Appointment
таблица.
В таблице встреч у меня есть следующие поля: AppointmentId
, AppointmentDate
, PatientId
В таблице пациентов у меня есть PatientId
, PatientName
В Appointment
таблице у меня есть записи следующим образом:
1 | 2020-08-08 | 2
2 | 2020-10-11 | 2
3 | 2020-12-15 | 2
4 | 2020-12-24 | 2
Что я хочу получить, так это то, что для всех пациентов я извлекаю наборы данных из PatientId
. Я хочу получить дату последней встречи, т.е. 2020-10-11
и Дату следующей встречи, т.е. 2020-12-15
Если я выполняю запрос сегодня.
Я пробовал следующее, но не получил желаемых результатов. Может кто-нибудь, пожалуйста, помочь мне с этим SQL-запросом?
SELECT
patient.PatientName,
MAX(appointment.AppointmentDate) AS NextVisit,
MIN(appointment.AppointmentDate) AS LastVisit
FROM
Patient patient
INNER JOIN
Appointment appointment ON patient.PatientId = appointment.PatientId
Комментарии:
1. Какую версию SQL вы используете (например, MySQL, SQL Server, Postgres и т. Д.)?
2. @TimBiegeleisen: SQL Server 2017
Ответ №1:
Вы можете использовать left joins
в sql следующим образом:
Select p.patientid, patientname,
Max(ap.appointmentdate) as previous_appointment,
Min(an.appointmentdate) as next _appointment
from patient p
Left join appointment ap on p.patientid = ap.patientid and ap.appointmentdate < sysdate
Left join appointment an on p.patientid = an.patientid and an.appointmentdate > sysdate
Group by p.patientid, p.patientname
Вы также можете использовать conditional aggregation
следующее:
Select p.patientid, patientname,
Max(case when ap.appointmentdate < sysdate then ap.appointmentdate end) as previous_appointment,
Min(case when ap.appointmentdate > sysdate then ap.appointmentdate end) as next _appointment
from patient p
Left join appointment ap on p.patientid = ap.patientid
Group by p.patientid, p.patientname
Пожалуйста, используйте >=
или <=
вместо <
и >
в состоянии в соответствии с вашими требованиями.