Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Estrapolare le date che stanno per scadere

    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!!!

  2. #2
    ipotizzo:

    dopo la risoluzione dei nomi della tabella (from e left join) viene risolto il where.
    Ora viene selezionato il record che risponde alla condizione che ovviamente non e' il max(prove_fisiche.data) ma quello che risponde true alla where.

    Prova a mettere where DATE_ADD(max(Data Prova Fisica)

    hai messo degli spazi nei nomi di campo???? pessima idea.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.