Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Query complessa: chi non acquista da più di 3 mesi?

    Ho bisogno di mostrare i record di una tabella (Preventivo) con i campi DataPreventivo e NomeCliente in modo che compaiano solo i clienti che non ordinano da più di tre mesi.

    Sono andato spedito con

    codice:
    DataOdierna=date()
    
    DataOdiernaMeno3Mesi=DateAdd("m", -3 ,DataOdierna)
    
    sql = "SELECT * FROM Preventivo WHERE CDate(DataPreventivo) BETWEEN #" & DataOdiernaMeno3Mesi & "# AND #" & DataOdierna & "#"
    poi ho realizzato quello che avevo scritto e ho capito che oggi non è giornata, sono un tantino fulminato e non lucido abbastanza; mi date una mano?

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,802
    che c'entra BETWEEN?
    devi chiedere una data "minore a"
    where CDate(DataPreventivo) < DataOdiernaMeno3Mesi
    (da formattare)

    perché specifichi CDate? DataPreventivo non è un campo data?

  3. #3
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    che c'entra BETWEEN?
    devi chiedere una data "minore a"
    where CDate(DataPreventivo) < DataOdiernaMeno3Mesi

    perché specifichi CDate? DataPreventivo non è un campo data?
    Si, CDate l'ho dovuto usare perchè il campo data è di tipo testo e in questo modo funziona;

    Per la questione query invece, ho già provato ad inserire where DataPreventivo<DataOdiernaMeno3Mesi ma poi mi sono reso conto che se lo stesso cliente ordina 4 mesi fa e fa anche un ordinativo oggi (oppure in questi 3 mesi) la query non va bene.

    Ed è quì che mi sono bloccato.

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,802
    Quote Originariamente inviata da Luca1317 Visualizza il messaggio
    mi sono reso conto che se lo stesso cliente ordina 4 mesi fa e fa anche un ordinativo oggi (oppure in questi 3 mesi) la query non va bene.
    questo è quello che hai chiesto
    solo i clienti che non ordinano da più di tre mesi
    se vuoi altro, cambia la domanda

  5. #5
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    In pratica ho bisogno di mostrare a video i clienti che non ordinano da più di 3 mesi; ma c'è un piccolo intoppo nel quale ci sono cascato anche io e poi mi sono bloccato:

    con la query sopra (where CDate(DataPreventivo) < DataOdiernaMeno3Mesi) non faccio altro che mostrare i clienti che hanno ordinato più di tre mesi fa ma se uno di questi clienti ha fatto un ulteriore ordine proprio ieri, la query me lo mostra lo stesso o non dovrebbe farlo.

    Quindi dalla query dovrei escludere i clienti che hanno acquistato negli ultimi tre mesi.

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,802
    capito... m'era sfuggito il senso...

    where max(CDate(DataPreventivo)) < DataOdiernaMeno3Mesi

  7. #7
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Ma intendi così:
    codice:
    SELECT * FROM Preventivo WHERE max(CDate(DataPreventivo)) < DataOdiernaMeno3Mesi

  8. #8
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,802
    e già

  9. #9
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    e già



    Mi da errore:
    codice:
    Impossibile avere una funzione di aggregazione nella clausola WHERE (max(CDate(DataPreventivo))<DataOdiernaMeno3Mesi).
    Ultima modifica di Luca1317; 21-01-2015 a 15:31

  10. #10
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,802
    forse ricordo male ma mi pare che max si potesse usare anche come condizione...
    più tardi verifico, ora devo uscire.

    nel frattempo puoi chiedere quelli "prima di" e non "dopo di"

    una cosa tipo
    codice:
    where CDate(DataPreventivo)) < DataOdiernaMeno3Mesi and not CDate(DataPreventivo)) >= DataOdiernaMeno3Mesi
    fai sapere, ciao

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.