Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [MySql]Select con Between date

    Buon pomeriggio, avrei bisogno che mi faceste capire dov'è che sbaglio.
    Ho due tabelle tb_obiettivo_verifica e una tb_rubrica.
    I campi che accomunano queste due tabelle sono id_user.
    Da queste due tabelle dovrei eseguire un'operazione di sottrazione, in funzione della data nel campo work_start ed una in quello work_end.

    codice:
    SELECT 
    				agenda.tb_obiettivo_verifica.id_user,
    				agenda.tb_rubrica.id_user,
    				agenda.tb_obiettivo_verifica.appuntamenti,
    				agenda.tb_obiettivo_verifica.appuntamenti_da_fare,
    				agenda.tb_obiettivo_verifica.week,
    				agenda.tb_obiettivo_verifica.work_start,
    				agenda.tb_obiettivo_verifica.work_end,
    				agenda.tb_rubrica.esito_appuntamento,
    				(agenda.tb_obiettivo_verifica.appuntamenti - (SELECT COUNT(esito_appuntamento) FROM agenda.tb_rubrica
    				WHERE (agenda.tb_rubrica.esito_appuntamento =  'fatto' OR agenda.tb_rubrica.esito_appuntamento =  'non fatto')
    				))AS differenzaApp
    				FROM agenda.tb_obiettivo_verifica,agenda.tb_rubrica 
    				WHERE (agenda.tb_obiettivo_verifica.id_user = agenda.tb_rubrica.id_user) 
    				AND (agenda.tb_rubrica.data_esito 
    				BETWEEN
    				agenda.tb_obiettivo_verifica.work_start
    				AND agenda.tb_obiettivo_verifica.work_end
    				)
    				AND agenda.tb_rubrica.esito_appuntamento <>  ''
    				AND agenda.tb_rubrica.id_user =  '28'
    Ho 3 record nella tb_rubrica aventi queste date

    1)record 1 data 2012-06-20
    2)record 2 data 2012-06-21
    3)record 3 data 2012-05-10

    Dovrei far in modo di eseguire l'operazione di sottrazione, solo per quei record che hanno come mese, quello corrente.Cosi da eliminare tutti quei record che hanno una data diversa dal mese corrente.

    Attraverso la query che ho postato, purtroppo mi restituisce tutti e 3 i record.
    Dove sbaglio?

    Grazie mille.

  2. #2
    facendo in questo modo:
    codice:
    SELECT count(*)
    FROM tb_rubrica
    WHERE (data_esito between ('2012-06-01')AND ('2012-06-30'))
    AND
    (tb_rubrica.esito_appuntamento =  'fatto' OR tb_rubrica.esito_appuntamento =  'non fatto')
    Otterrei ciò che voglio...ma a me serve anche avere nei risultati anche i valori che sono nei campi della tb_obiettivo_verifica...

  3. #3
    visto solo al volo direi che nella subquery non imposti il range delle date per cui ti conta tutti i record. Inoltre non capisco quell'OR tra fatto e non fatto. Si direbbe TUTTI...

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

  4. #4
    Ciao Piero buon giorno ti ringrazio della risposta...
    Ho fatto un po' di prove,e questa sembra essere la soluzione.
    codice:
    SELECT (
    agenda.tb_obiettivo_verifica.appuntamenti - ( 
    SELECT COUNT( esito_appuntamento ) 
    FROM agenda.tb_rubrica
    WHERE (
    agenda.tb_rubrica.esito_appuntamento =  'fatto'
    OR agenda.tb_rubrica.esito_appuntamento =  'non fatto'
    )
    AND (
    agenda.tb_rubrica.data_esito
    BETWEEN  '2012-06-01'
    AND  '2012-06-30'
    ) )
    ) AS differenzaApp
    FROM agenda.tb_obiettivo_verifica, agenda.tb_rubrica
    WHERE (
    agenda.tb_obiettivo_verifica.id_user = agenda.tb_rubrica.id_user
    )
    AND agenda.tb_rubrica.esito_appuntamento <>  ''
    AND agenda.tb_rubrica.id_user =  '28'
    LIMIT 1
    Per quanto riguarda l'operatore OR ho constatato che utilizzandolo mi restituisce la differenza esatta.Praticamente provando con AND, non esegue nessuna operazione.

    Grazie mille....

  5. #5
    Originariamente inviato da ANTAGONIA

    Per quanto riguarda l'operatore OR ho constatato che utilizzandolo mi restituisce la differenza esatta.Praticamente provando con AND, non esegue nessuna operazione.
    Intendevo dire che se hai due opzioni: "fatto" e "non fatto" mettere in OR e' una operazione inutile perche si intenderebbero TUTTI. Se hai altre condizioni oltre al fatto e non fatto allora avrebbe senso. Anche se, per definire uno stato, sarebbe meglio usare un campo numerico tipo:

    0 = non fatto
    1 = fatto
    2 = escluso
    3 = privilegiato
    4 = ciaociao

    ovviamente una AND con lo stesso campo non potra' mai funzionare perche' se e' uno non potra' mai essere anche un'altro allo stesso tempo. Manco la release rilasciata dalla software house di Lourdes....

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

  6. #6
    Scusami ho un'altra domanda.
    Potresti spiegarmi perchè se eseguo la query di seguito:
    codice:
    SELECT 
         tb_obiettivo_verifica.id_user,
         tb_rubrica.id_user,
         tb_obiettivo_verifica.appuntamenti,
         tb_obiettivo_verifica.appuntamenti_da_fare,
         tb_obiettivo_verifica.week,
         tb_obiettivo_verifica.work_start,
         tb_obiettivo_verifica.work_end,
         tb_rubrica.esito_appuntamento,
         tb_rubrica.data_esito
    FROM 
      	   tb_obiettivo_verifica
    INNER JOIN 
      	   tb_rubrica
      ON 
         	 tb_obiettivo_verifica.id_user = tb_rubrica.id_user
    where (tb_rubrica.data_esito BETWEEN  '2012-06-01' AND  '2012-06-30')
    and tb_rubrica.id_user=28
    Nella tabella tb_obiettivo_verifica, ho un solo record per il mese corrente giugno:
    -id_user=28
    -work_start=2012/06/01
    -work_end=2012/06/30

    ma posso avere altri record, per quello user, dei mesi precedenti es:
    -id_user=28
    -work_start=2012/05/01
    -work_end=2012/05/30
    oppure
    -id_user=28
    -work_start=2012/04/01
    -work_end=2012/04/30


    Invece per quanto riguarda la tb_rubrica, posso avere n record per quello user.
    -id_user=28
    -nominativo=mario rossi
    -data_esito=2012/06/20
    ------------------
    -id_user=28
    -nominativo=mario verdi
    -data_esito=2012/06/24

    ecc ecc....

    Domanda: come mai mi restituisce 3 record, invece che due,attraverso la clausola where?
    Non dovrebbe restituirmene 2,in base al range di date che gli ho passato?
    grazie ancora...

  7. #7
    ti ringrazio della risposta di cui sopra, l'ho letta adesso..
    cmq ho provato a fare anche cosi:
    codice:
    SELECT tb_obiettivo_verifica.id_user, tb_rubrica.id_user, tb_obiettivo_verifica.appuntamenti, tb_obiettivo_verifica.appuntamenti_da_fare, tb_obiettivo_verifica.week, tb_obiettivo_verifica.work_start, tb_obiettivo_verifica.work_end, tb_rubrica.esito_appuntamento, tb_rubrica.data_esito
    FROM tb_obiettivo_verifica, tb_rubrica
    WHERE (
    tb_rubrica.data_esito >= tb_obiettivo_verifica.work_start
    AND tb_rubrica.data_esito <= tb_obiettivo_verifica.work_end
    )
    AND tb_rubrica.id_user =28
    Perchè a me servirebbe che la data nel tb_rubrica.data_esito fosse compresa tra la tb_obiettivo_verifica.work_start e work_end...

    Però anche in questo modo, me ne restituisce 3.

  8. #8
    Mi manca la visione del contenuto delle tabelle.

    Commentiamo la query:

    intento e' inutile che cerchi due volte l'id_user poiche' il campo con nome uguale viene sovrascritto e vedrai sempre e solo tb_rubrica.id_user che si presume sia lo stesso di tb_obiettivo_verifica.id_user

    la equi-join tra le due tabelle cerca tutti i record con equivalenza su id_user.

    il where cerca il range di date sulla tabella tb_rubrica e (AND) id_user = 28

    Nulla viene cercato o eliminato nella tabella tb_obiettivo_verifica se non la corrispondenza dell'id_user. Credo di supporre che le date nel db siano nel formato yyyy-mm-dd

    Quale sarebbe il terzo record????

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

  9. #9
    Originariamente inviato da ANTAGONIA
    ti ringrazio della risposta di cui sopra, l'ho letta adesso..
    cmq ho provato a fare anche cosi:
    codice:
    SELECT tb_obiettivo_verifica.id_user, tb_rubrica.id_user, tb_obiettivo_verifica.appuntamenti, tb_obiettivo_verifica.appuntamenti_da_fare, tb_obiettivo_verifica.week, tb_obiettivo_verifica.work_start, tb_obiettivo_verifica.work_end, tb_rubrica.esito_appuntamento, tb_rubrica.data_esito
    FROM tb_obiettivo_verifica, tb_rubrica
    WHERE (
    tb_rubrica.data_esito >= tb_obiettivo_verifica.work_start
    AND tb_rubrica.data_esito <= tb_obiettivo_verifica.work_end
    )
    AND tb_rubrica.id_user =28
    Perchè a me servirebbe che la data nel tb_rubrica.data_esito fosse compresa tra la tb_obiettivo_verifica.work_start e work_end...

    Però anche in questo modo, me ne restituisce 3.
    per questa query (forma theta) devi aggiungere l'equi-join altrimenti ti trovi record duplicati...

    codice:
    .....
    AND tb_obiettivo_verifica.id_user = tb_rubrica.id_user
    AND tb_rubrica.id_user =28

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

  10. #10
    ancora grazie...
    allora ho inserito la equi-join come consigliato:
    codice:
    ......
    FROM tb_obiettivo_verifica, tb_rubrica
    WHERE (
    tb_rubrica.data_esito >= tb_obiettivo_verifica.work_start
    AND tb_rubrica.data_esito <= tb_obiettivo_verifica.work_end
    )
    AND tb_obiettivo_verifica.id_user = tb_rubrica.id_user
    AND tb_rubrica.id_user =28
    Ma il risultato non cambia, visualizzo sempre 3 record.

    Il record in più ha queste date.
    Nella tb_obiettivo_verifica
    work_start=2012-05-08 10:00:00
    work_end =2012-05-31 00:00:00

    Nella tb_rubrica invece la data_esito ha 2012-05-21 00:00:00

    Infatti ora che ci penso, è giusto che mi restituisce 3 record.
    Perchè non gli dico da nessuna parte che voglio visualizzare, record con le date che sono comprese come in quel modo, ma del mese corrente.

    Quindi domanda:
    Come faccio utilizzando gli stessi operatori di confronto come in questa porzione:
    codice:
    WHERE (
    tb_rubrica.data_esito >= tb_obiettivo_verifica.work_start
    AND tb_rubrica.data_esito <= tb_obiettivo_verifica.work_end
    )
    e allo stesso tempo dirgli che però voglio solo le date comprese del mese corrente?
    a me non interessano i record con date precedenti.
    Spero di essermi spiegato e di non romperti troppo le scatole.
    Cmq grazie mille...

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.