Если вам нужны только doctor_id
, patient_id
и date
, используйте условное агрегирование:
select doctor_id, patient_id,
coalesce(
min(case when date > curdate() then date end),
max(case when date < curdate() then date end)
) date
from tablename
group by doctor_id, patient_id
Если вам нужна полная строка с id
:
select t.* from tablename t
where (doctor_id, patient_id, date) = (
select doctor_id, patient_id,
coalesce(
min(case when date > curdate() then date end),
max(case when date < curdate() then date end)
) date
from tablename
where (doctor_id, patient_id) = (t.doctor_id, t.patient_id)
);
Вы можете заменить символы неравенства <
и >
на <=
или >=
для случая, который включает также текущую дату. См. Демонстрацию .