13/12/2023 - @Alex ha scritto:
DATEDIFF('d',[dal],[al])=20
Ha una tabella dove:
Pippo assente dal 1/02/23 al 3/02/23 dove dal è un campo e al un altro campo.
Pippo rinnova il certificato malattia e risulta assente dal 4/02/23 al 20/02/23.
In tuto ha 2 record assenze di pippo dal al (già sbagliato alla base).
Datediff dal al trova 3gg (recod1) e 17gg (record2) non 20gg (record1 + record2) se non erro.
Se decidi di fare soma record rischi di ottenere 20 con le assenze di pippo alle date dal 1/03/23 al 10/03/23 e dal 21/03/23 al 30/03/23
Non c'è continuità e restano due record da 10 giorni di assenza. (Marzo sarebbe Assente x 10; presente x 10; assente x 10; presente x1).
Modus operandi:
Prendendo il valore “dal” del primo record, controllare se il record successivo ha valore "dal" consecutivo al valore “al” del precedente record, se si, calcolare la differenza e ripetere l'operazione col secondo e terzo record e così via fino alla fine del record.
Il tutto per n persone, col dubbio incolmato se si parla di mese corrente o c'è continuità di assenza di due mesi consecutivi.
In più, sempre senza poter indicare alla sql che natura hanno quelle assenze.
Come suggerito, serve un campo che lega la continuità delle assenze tra i record.
All'inserimento record controlli se l'attuale “dal” è consecutivo dell'ultima “al”. Se si, leggi il campo xy dell'ultima assenza e inserisci lo stesso valore al nuovo record di assenza (e magari anche il nr. Di giorni tanto scrivi il codice una volta e poi ci pensa la cpu)
Alla query sum(giorni) where xy
Proprio per semplificare al massimo.