Non è affatto semplice, e potrei anche averla complicata più del necessario. Così però dovrebbe andare
codice:
select pv.patient, p.name, pv.datavisita, stato from patients_visits pv join
(
    SELECT patient, max(datavisita)as datavisita FROM `patients_visits`groupby patient
)as t1
on pv.patient = t1.patient and pv.datavisita = t1.datavisita
left join patients p on pv.patient = p.id

Attenzione che i nomi delle colonne non corrispondono ai tuoi, e anche in patients_visits c'è una s in più