UPDATE xml_turni AS xml
INNER JOIN dip_turni_assenze AS asse ON (xml.idturno=asse.idturno AND xml.idpersona=asse.asse_idpersona AND asse.asse_iddipendente IS NOT NULL
                                         AND (GREATEST(asse.asse_data_inizio,asse.asse_data_fine) >= @start AND asse.asse_data_inizio <= @stop)
                                        )
INNER JOIN dip_assenze AS tipo ON (asse.asse_idassenza=tipo.id)
SET xml.causale_assenza=tipo.codice
, xml.ora_inizio=IF(asse.asse_data_inizio < xml.data,'00:00',asse.asse_ora_inizio)  
, xml.ora_fine=IF(asse.asse_data_fine > xml.data,'23:59',asse.asse_ora_fine)
, xml.tipol_inizio=IF(asse.asse_data_inizio < xml.data,'00:00',asse.asse_ora_inizio)  
, xml.tipol_fine=IF(asse.asse_data_fine > xml.data,'23:59',asse.asse_ora_fine)  
, xml.ore_assenza=CAST(( (MK_TIME(xml.data,IF(asse.asse_data_fine > xml.data,'23:59',asse.asse_ora_fine))-MK_TIME(xml.data,IF(asse.asse_data_inizio < xml.data,'00:00',asse.asse_ora_inizio))) /60/60) AS DECIMAL(12,2))
WHERE xml.kind='Z_ASS'
;
DELETE FROM xml_turni
WHERE kind='Z_ASS' AND causale_assenza IS NULL
;
UPDATE xml_turni AS xml
INNER JOIN dip_turni_assenze AS asse ON (xml.idturno=asse.idturno AND xml.idpersona=asse.asse_idpersona AND asse.asse_iddipendente IS NOT NULL
                                         AND (GREATEST(asse.asse_data_inizio,asse.asse_data_fine) >= @start AND asse.asse_data_inizio <= @stop)
                                        )
INNER JOIN dip_assenze AS tipo ON (asse.asse_idassenza=tipo.id)
SET xml.causale_assenza=tipo.codice
, xml.ore_assenza=CAST(( (MK_TIME(xml.data,IF(asse.asse_data_fine > xml.data,'23:59',asse.asse_ora_fine))-MK_TIME(xml.data,IF(asse.asse_data_inizio < xml.data,'00:00',asse.asse_ora_inizio))) /60/60) AS DECIMAL(12,2))
WHERE xml.kind!='Z_ASS'