Per la seconda domanda ci sono vari approcci.
Te ne metto due, va scelto in funzione dell'explain
Normalmente uso la prima, ma dipende dai casi (ovvero se hai una materializzazione delle subquery dipendenti o no)
Con join hai una derivate e ti puoi beccare temporary e filesortcodice:select id, visita, valore from idvisita where valore = (select min(valore) from idvisita as sub where sub.visita=idvisita.visita)
Comunque spero che la logica sia abbastanza evidente (e di aver capito la domandacodice:select esterna.* from (select visita, min(valore) as minimo from idvisita group by visita) as sub join idvisita as esterna on esterna.visita = sub.visita and esterna.valore = sub.minimo)

)
Rispondi quotando