SQL | Вытянуть только тех пациентов у кого не было приёма после 2019 года

Есть таблицы [Patient], [Schedule], [SchedulePatient]. Используя такой запрос я хотел вытащить пациентов([Patient]) у которых не было приёма ([Schedule],[SchedulePatient]) после определённого года используя этот запрос:

SELECT   Patient.PatientID, Patient.PatientName, Patient.PatientPersonalNumber, Schedule.ScheduleID, Schedule.ScheduleName,Schedule.ScheduleStatusRef, Schedule.ScheduleEndTime, SchedulePatient.ScheduleRef, SchedulePatient.PatientRef
FROM     Patient INNER  JOIN
                  SchedulePatient ON Patient.PatientID = SchedulePatient.PatientRef  INNER JOIN
                  Schedule ON SchedulePatient.ScheduleRef = Schedule.ScheduleID where ScheduleEndTime < '2019-01-01'

Есть колонки ScheduleStartTime и ScheduleEndTime соответственно начало и конец приёма. Данные хранят в таком виде 2016-07-05 17:30:00.000. Как правильно построить условия что бы вытащить только пациентов которые ходили на приём до 2019 года?


Ответы (1 шт):

Автор решения: Aziz Umarov

Попробуйте так

SELECT  DISTINCT
        Patient.PatientID, 
        Patient.PatientName, 
        Patient.PatientPersonalNumber
FROM 
       Patient 
       LEFT JOIN SchedulePatient 
           INNER JOIN Schedule 
               ON SchedulePatient.ScheduleRef = Schedule.ScheduleID 
                 AND Schedule.ScheduleEndTime >= '2019-01-01'
          ON Patient.PatientID = SchedulePatient.PatientRef 
       INNER JOIN SchedulePatient AS SchedulePatient1
           INNER JOIN Schedule AS Schedule1 
               ON SchedulePatient1.ScheduleRef = Schedule1.ScheduleID 
                 AND Schedule1.ScheduleEndTime < '2019-01-01'
          ON Patient.PatientID = SchedulePatient1.PatientRef 
where 
    SchedulePatient.SchedulePatientID IS NULL
      
→ Ссылка