Buongiorno a tutti.
Diciamo che ho risolto creando una temporary table con la subquery annidata e così il raggrupamento mi dà il risultato sperato. In sintesi, dell'allievo che ha dato 2 esami della stessa materia, mi deve restituire il voto dell'ultimo esame sostenuto.
Per coloro che hanno la pazienza di "farmi crescere professionalmente", espongo il codice sql della vers 5.5 per eventuali suggerimenti x il futuro. Grazie
Alessio
p.s. spero di non aver infranto regole/consigli del forum, nel caso ... segnalate please
------------------------------------
select appo.codice_materia,appo.cfu,appo.descrizione_materia,appo.codice_allievo,appo.cognome_nome,appo.voto_max, appo.lode_max,appo.sessione,appo.materie_sessione0,appo.materie_sessione2,appo.materie_sessione1,appo.cfu_cons, appo.voto_somma,appo.ITER_RIDOTTO
from (SELECT materie.CODICE as codice_materia, (materie.CFU_1 + materie.CFU_2) as cfu,
materie.DESCRIZIONE as descrizione_materia,anagrafica_allievi.CODICE as codice_allievo,
concat(anagrafica_allievi.COGNOME, ' ', anagrafica_allievi.NOME) as cognome_nome,IFNULL(voti.VOTO, 0) as voto_max, IFNULL(voti.LODE, 0) as lode_max, IFNULL(voti.SESSIONE, 0) as sessione,
if (IFNULL(voti.SESSIONE, 0) = 0 and(IFNULL(voti.VOTO, 0) < 18),1,0) as materie_sessione0,
(case when(IFNULL(voti.SESSIONE, 0) = 0) then 1 when(IFNULL(voti.SESSIONE, 0) = 2 and(IFNULL(voti.VOTO, 0) < 18)) then 1 else 0 end) as materie_sessione2,
(case when(IFNULL(voti.SESSIONE, 0) = 0) then 1 when(IFNULL(voti.SESSIONE, 0) = 2) then 1 when(IFNULL(voti.SESSIONE, 0) = 1 and(IFNULL(voti.VOTO, 0) < 18)) then 1 else 0 end) as materie_sessione1,
if ((IFNULL(voti.VOTO, 0) >= 18),(materie.CFU_1 + materie.CFU_2),0) as CFU_cons,
(CASE WHEN materie.TIPO_MATERIA = 'DU' then IFNULL(voti.VOTO,0)*(materie.CFU_1 + materie.CFU_2) WHEN materie.TIPO_MATERIA = 'DTP' then IFNULL(voti.VOTO,0) else 0 end) as voto_somma,
anagrafica_allievi.ITER_RIDOTTO
FROM anagrafica_allievi
LEFT JOIN materie ON materie.CORSO_CLASSE = anagrafica_allievi.CORSO_CLASSE AND materie.CORPO = anagrafica_allievi.CORPO LEFT JOIN voti ON anagrafica_allievi.CODICE = voti.CODICE AND materie.CODICE = voti.MATERIA
LEFT JOIN tipi_interrogazione ON voti.INTERROGAZIONE = tipi_interrogazione.id_row
where anagrafica_allievi.CORSO_CLASSE = 39 and anagrafica_allievi.CORPO = 'SM' AND voti.ASSENTE = 'N' AND (anagrafica_allievi.dimissioni_rinvio <> 'R'
and anagrafica_allievi.dimissioni_rinvio <> 'D' and anagrafica_allievi.dimissioni_rinvio <> 'E')
and(voti.convalida = 1 or ISNULL(voti.CONVALIDA)) and (voti.statistica='S' or IFNULL(voti.statistica,'S')='S')
and materie.cons_studi = 'S' AND materie.MATERIA_ESAME = 'S' and anagrafica_allievi.nazionalita='Z000'
AND materie.TIPO_MATERIA = 'DU'
ORDER BY descrizione_materia,cognome,DATA_INTERROGAZIONE desc ) as appo
GROUP BY appo.codice_allievo,appo.codice_materia ORDER BY appo.descrizione_materia,appo.cognome_nome