SELECT s.esercizio
, s.numero
, s.data_partenza
, s.ora_partenza
, IF(s.ora_rientro>s.ora_partenza,DATE_FORMAT(DATE_ADD(STR_TO_DATE(s.data_partenza,'%Y%m%d'),INTERVAL 1 DAY),'%Y%m%d'),s.data_partenza) AS data_rientro
, s.ora_rientro
, s.cognome
, s.nome
, s.sesso
, s.data_nascita
, s.comune_nascita_codiceistat
, s.comune_residenza_codiceistat
, s.indirizzo
, s.civico
, s.codice_fiscale
, s.cognome_operatore
, s.nome_operatore
, s.sesso_operatore
, s.data_nascita_operatore
, s.comune_nascita_codiceistat_operatore
, s.comune_residenza_codiceistat_operatore
, s.indirizzo_operatore
, s.civico_operatore
, s.codice_fiscale_operatore
, s.id_articolo
, s.importo 
FROM (
    SELECT SUBSTR(s.data,1,4) AS esercizio
    , CAST(s.numero_servizio AS DECIMAL(10,0)) AS numero
    , s.data AS data_partenza
    , REPLACE(IF(SUBSTR(IFNULL(s.orario_inizio_servizio,IFNULL(s.orario_partenza,'00:00')),1,5)!='','00:00',SUBSTR(IFNULL(s.orario_inizio_servizio,IFNULL(s.orario_partenza,'00:00')),1,5)),':','') AS ora_partenza
    , REPLACE(IF(SUBSTR(IFNULL(s.orario_fine_servizio,IFNULL(s.orario_arrivo,'00:00')),1,5)!='','00:00',SUBSTR(IFNULL(s.orario_fine_servizio,IFNULL(s.orario_arrivo,'00:00')),1,5)),':','') AS ora_rientro
    , ts.id AS id_causale
    , p_assi.cognome AS cognome
    , p_assi.nome AS nome
    , UPPER(p_assi.sesso_mf) AS sesso
    , p_assi.datanascita AS data_nascita
    , cn_assi.codice_comune AS comune_nascita_codiceistat
    , cr_assi.codice_comune AS comune_residenza_codiceistat
    , p_assi.indirizzo AS indirizzo
    , '' AS civico
    , p_assi.codfisc AS codice_fiscale
    , p_auti.cognome AS cognome_operatore
    , p_auti.nome AS nome_operatore
    , UPPER(p_auti.sesso_mf) AS sesso_operatore
    , p_auti.datanascita AS data_nascita_operatore
    , cn_auti.codice_comune AS comune_nascita_codiceistat_operatore
    , cr_auti.codice_comune AS comune_residenza_codiceistat_operatore
    , p_auti.indirizzo AS indirizzo_operatore
    , '' AS civico_operatore
    , p_auti.codfisc AS codice_fiscale_operatore
    , ti.id AS id_articolo
    , CAST(s.importo AS DECIMAL(12,2)) AS importo
    FROM s_servizi AS s
    INNER JOIN s_tipologie_intervento AS ti ON (s.idcontatto=ti.idcontatto AND s.idtipologia_intervento=ti.id)
    INNER JOIN s_tipologie_servizio AS ts ON (ti.idcontatto=ts.idcontatto AND ti.idtipologiaservizio=ts.id)
    INNER JOIN a_anapersone AS p_auti ON (s.idcontatto=p_auti.idcontatto AND s.idautista=p_auti.id)
    LEFT JOIN a_citta AS cn_auti ON (p_auti.idcontatto=cn_auti.idcontatto AND p_auti.id_cittanascita=cn_auti.id)
    LEFT JOIN a_citta AS cr_auti ON (p_auti.idcontatto=cr_auti.idcontatto AND p_auti.id_cittaresidenza=cr_auti.id)
    INNER JOIN a_anapersone AS p_assi ON (s.idcontatto=p_assi.idcontatto AND s.idpersona_fatturazione=p_assi.id)
    LEFT JOIN a_citta AS cn_assi ON (p_assi.idcontatto=cn_assi.idcontatto AND p_assi.id_cittanascita=cn_assi.id)
    LEFT JOIN a_citta AS cr_assi ON (p_assi.idcontatto=cr_assi.idcontatto AND p_assi.id_cittaresidenza=cr_assi.id)
    WHERE  s.idcontatto=@idcontatto AND s.data >= @start AND s.data <= @stop
    AND IF(@take_yet_fatt=1,1=1,IFNULL(s.fatturato,0)=0)
    AND IFNULL(s.importo,0.00)!=0.00
    AND s.prenotata_incorso_effettuata='E'
    AND s.idpersona_fatturazione IS NOT NULL
    AND ts.kind='INFE'
    GROUP BY s.id
    ORDER BY s.data, IFNULL(s.orario_inizio_servizio,s.orario_partenza), IFNULL(s.orario_fine_servizio,s.orario_arrivo)
) AS s