Buongiorno a tutti, sono alle prese con una query che mi "dovrebbe" restituire delle date che si trovano in un intervallo temporale tra OGGI e OGGI + 2MESI e fin qui nessun problema :
" WHERE (DATE_ADD(Data Prova Fisica`, INTERVAL 1 YEAR BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 2 MONTH))".
Veniamo al dunque:
nel DB ci sono due TAB relazionate
1-dati_anagrafici
2-prove_fisiche
Le prove fisiche, hanno una valenza di 1 anno solare (365 gg dalla data della prova), ogni Dati_anagrafici.id possiede più prove (ovviamente per uno storico); quindi estrapolo le l'elenco del personale con le prove in vigore:
"SELECT dati_anagrafici.ID,dati_anagrafici.Cognome, dati_anagrafici.nome, max(prove_fisiche.data) FROM dati_anagrafici left join prove_fisiche on dati_anagrafici.id=prove_fisiche.id_anagrafica
WHERE ((CURDATE()>prove_fisiche.data)-(DATE_ADD(prove_fisiche.data, INTERVAL 1 YEAR)< CURDATE()))
GROUP BY dati_anagrafici.id"
RISULTATO:
id nome cognome data prova 1 mario rossi 10/05/2013 2 pinco pallino 10/02/2014 3 cric croc 01/01/2014 4 peter pan 10/04/2013
Bene se volessi sapere le prove ancora valide.
Mettendo la condizione postata in precedenza, " WHERE (DATE_ADD(Data Prova Fisica`, INTERVAL 1 YEAR BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 2 MONTH))".
il risultato:
id nome cognome data prova 1 mario rossi 10/05/2013 4 peter pan 10/04/2013
Anche questo risultato è giusto.
Il problema consiste nel:
supponendo che MARIO ROSSI, prima della data di scadenza, effettui la prova(quindi alla corrispondente id=1 dei dati anagrafici, si aggiunge un' altra id prova), la risultante della query per estrapolare le date in scadenza (due mesi prima della scadenza),
"SELECT dati_anagrafici.ID,dati_anagrafici.Cognome, dati_anagrafici.nome, max(prove_fisiche.data) FROM dati_anagrafici left join prove_fisiche on dati_anagrafici.id=prove_fisiche.id_anagrafica
WHERE (DATE_ADD(Data Prova Fisica`, INTERVAL 1 YEAR BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 2 MONTH))
GROUP BY dati_anagrafici.id"
RISULTATO:
id nome cognome data prova 1 mario rossi 10/05/2013 4 peter pan 10/04/2013
quando dovrebbe solo farmi visualizzare PETER PAN!!!
Cosa sto sbagliando?
Per favore aiutatemi!!!![]()