Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Between con date mancanti

    id | . . data . . . | prezzo
    1 .| 18/11/2015 | 50
    2 .| 19/11/2015 | 30
    3 .| 21/11/2015 | 40


    Devo fare la somma di tutti i prezzi in un determinato range di date.

    il problema si presenta quando le date mancano;

    mi spiego meglio:

    se dovessi sommare i prezzi dal 18/11/2015 al 19/11/2015 il problema non si porrebbe, come codice mi andrebbe bene questo:

    codice:
    sql = "SELECT SUM(prezzo) AS PrezzoGiorni FROM Prezzi WHERE Data BETWEEN #" & DataInizio & "# AND #" & DataFine & "# "
    e il risultato sarebbe 80 (50 + 30).

    il problema sorge quando dovrò fare la stessa operazione ma dal 18/11/2015 al 21/11/2015 perchè la data mancante (quella del 20/11/2015) non è nel database, ha un prezzo fisso di 20 e io non ho idea di come fare ad inserirlo nell'sql.

    qualche consiglio?

  2. #2
    1. devi mettere la tua tabella in join con un'altra dove ci sono i prezzi di default per OGNI giorno, poi giocare con i null
    2. devi indicare con quale db stai lavorando, come da regolamento

  3. #3
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,781
    o la inserisci nel db, o la aggiungi a parte.
    non puoi lavorare un dato che non c'è

  4. #4
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Ah si, il database è access;

    avevo pensato di scrivere tutte le date con il valore di default fino al 3015 ma non mi sembrava una cosa "etica" dal punto di vista della programmazione

    nell'altra tabella ci sarebbe da inserire solo un prezzo di default e per le date mancanti l'sql dovrebbe prendere il valore da lì ma non ho proprio idea di come fare, devo davvero scrivere nel database date fino al 3015 o c'è un modo più elegante per arrivare allo stesso risultato?

  5. #5
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,781
    ovviamente registrare ogni singola data e relativo prezzo sarebbe le via più semplice, anche per future analisi generiche.

    l'alternativa direi che è quella proposta da optime, ovvero fare la join tra due tabelle: quella delle tue date, e quelle con i prezzi "di default" validi in quel periodo (quindi anche devi registrare i prezzi per quel periodo)

    poi dipende da quale logica si vuole applicare in generale per l'applicazione delle tariffe.

    'notte

  6. #6
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    No, aspetta;

    in tutti i giorni di tutti gli anni il prezzo è di 20

    tranne nelle date che inserisco nel database come nell'esempio:

    id | . . data . . . | prezzo
    1 .| 18/11/2015 | 50
    2 .| 19/11/2015 | 30
    3 .| 21/11/2015 | 40

    prezzo di default per date mancanti: 20


    il problema è, come sviluppo la riga sql? mi fate un esempio o una riga bella e pronta
    in modo che la possa adattare?

  7. #7
    a=conta quanti giorni ci sono nell'intervallo
    b=conti quanti record leggi da db
    c=a-b
    risultato tua sum+c*20

    arzigogolato ma funzia (ah, con access scordatelo di poterlo fare con una query sql)

  8. #8
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Ci avevo pensato ma credevo si potesse fare tutto in SQL; poco male, funziona bene lo stesso.

    Grazie

  9. #9
    segui il mio consiglio usa una tabella giorni che è più flessibile

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.