Per la prima volta in questo forum vedo del codice che mi piace! Sempre sia lodato (il codice).
Ti segnalo un primo problema. Se usi GROUP BY, nella SELECT dovresti usare *solo* campi menzionati nella GROUP BY, oppure passati a una funzione, tipo MAX(nome_campo). Il motivo è semplice: tu vai a estrarre una riga *calcolata* (con massimi, minimi, medie...) e non fisicamente esistente in tabella. Quindi nominare campi della tabella non ha senso.
MySQL ha sempre permesso di fare questo, ma la documentazione diceva di non farlo. Ora è ancora permesso, ma MySQL 5.6 a volte dà risultati sbagliati.