Выберите, где МАКС. (ДАТА) между X и X - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь отобрать только тех пациентов, у которых было последнее назначение в 2015 году. Идеальная вещь выглядела бы так:

Select person.name, person.surname
inner join patient on patient.pat_id=person.per_id
inner join appointment on appointment.pat_id=patient.pat_id
where MAX(appointment.date) between '31.12.2014'and '01.01.2016'

Но значение MAX не допускается в предложении WHERE. Какой лучший обходной путь?

1 Ответ

2 голосов
/ 13 мая 2019

Вы рядом:

Select p.name, p.surname
from person p inner join
     patient pa
     on pa.pat_id = p.per_id join
     appointment a
     on a.pat_id = pa.pat_id
group by p.per_id, p.name, p.surname
having max(a.date) >= date '2015-01-01' and
      max(a.date) < date '2016-01-01';

Примечания:

  • Вам нужно group by.
  • Обратите внимание, что я включаю per_id в group by, потому что разные люди могут иметь одно и то же имя.
  • Константы даты можно вводить с помощью ключевого слова date.
  • Не использовать between с датами; это особенно верно в Oracle, где столбец date может иметь компонент времени.
...