Criterio intervallo temporale

di il
13 risposte

Criterio intervallo temporale

Ciao a tutti, sono una principiante di ACCESS e non riesco a risolvere un problema nella mia QUERY. Spero possiate aiutarmi.
Ho una tabella1 associazione formata nel seguente modo:
SEZIONE, NODO A, NODO B (in pratica nel campo sezione ho un nome in formato numero associato dell' arco composto dal NODO A e NODO B)
e una tabella2 della forma seguente:
SEZIONE, RIFERIMENTO TEMPORALE INIZIALE, RIFERIMENTO TEMPORALE FINALE, PASSAGGI TOTALI AUTOVETTURE.
In pratica con la mia query vorrei sommare tutti i valori nel campo PASSAGGI TOTALI AUTOVETTURE di una stessa SEZIONE in una particolare fascia temporale ad esempio RIFERIMENTO TEMPORALE INIZIALE >=#13/11/2019 07:00:00# e RIFERIMENTO TEMPORALE FINALE <=#13/11/2019 09:00:00# .
La QUERY base funziona ma il problema sta nelle varie casistiche che si vanno a creare, non tutte le sezioni infatti, hanno un valore PASSAGGI TOTALI AUTOVETTURE per una stessa data, quindi per includere tutte le sezioni che abbiano un dato sono costretta a inserire un secondo criterio intervallo temporale che includa le sezioni escluse con il primo criterio. A questo punto però con il secondo criterio ho incluso anche sezioni che hanno un valore PASSAGGI TOTALI AUTO in entrambe le date, e qui stà il problema, perche la mia query somma questi valori.
Spero di essermi spiegata.

13 Risposte

  • Re: Criterio intervallo temporale

    Ipazia ha scritto:


    Spero di essermi spiegata.
    Per me no...e sei anche incappata nel più duro di comprendonio di tutto il forum.

    Ipazia ha scritto:


    Ho una tabella1 ... e una tabella2
    In Access in nomi tabella devono avere una propria "coerenza omogenea" di dati. Tale coerenza parte proprio dal nome stesso che generalmente e convenientemente deve essere al PLURALE (es. Persone, Ordini, Articoli...).

    Il resto dei campi che hai esposto...credo abbiano problemi di "normalizzazione" (che brutta parolaccia!!!)...e alcuni di loro, molto probabilmente devono essere frutto di una query e non digitati in tabella dall'utente.

    Propongo un reset e una esposizione chiara così:
    - di cosa parla il database
    - elenca tutti i nomi propri delle tabelle (cerca di nominarle come ti ho indicato prima)
    - nomi propri di tutti i loro campi, con indicazione della "chiave primaria" (importantissima)
    - le relazioni
    - rispiega tutto usando i chiari ed espliciti nomi propri
  • Re: Criterio intervallo temporale

    Grazie per aver risposto, il database riguarda rilevamenti di traffico, le sezioni sono punti della rete stradale in cui viene conteggiato da particolari dispositivi quanti veicoli passano durante le ore della giornata.
    Cerco di esporti le caratteristiche delle tabelle :
    tabella 1
    ID numerazione automatica
    SEZIONI numerico
    DIREZIONI testo breve
    NODI A numerico
    NODI B numerico
    INFO testo breve
    ID_SCRLINE numerico
    FONTI testo breve
    CONF numerico
    tabella2
    SEZIONI numerico
    RIFERIMENTI TEMPORALI INIZIALI data/ora
    FINE RIFERIMENTI TEMPORALI data/ora
    CORSIE numerico (indica il numero delle corsie stradali)
    DIREZIONI testo breve (direzione arco stradale)
    PASSAGGI TOTALI AUTO numerico
    Le relazioni :
    FROM [TABELLA1] INNER JOIN [TABELLA2] ON ([TABELLA1].Direzione = [TABELLA2].Direzione) AND ([TABELLA1].Sezione = [TABELLA2].Sezione)
  • Re: Criterio intervallo temporale

    Io chiamerei Tabella1=Sezioni, Tabella2=Passaggi.
    Il resto mi sembra tutto giusto-coerente. Però

    Ipazia ha scritto:


    In pratica con la mia query vorrei sommare tutti i valori nel campo PASSAGGI TOTALI AUTOVETTURE di una stessa SEZIONE in una particolare fascia temporale ad esempio RIFERIMENTO TEMPORALE INIZIALE >=#13/11/2019 07:00:00# e RIFERIMENTO TEMPORALE FINALE <=#13/11/2019 09:00:00# .
    La QUERY base funziona ma il problema sta nelle varie casistiche che si vanno a creare, non tutte le sezioni infatti, hanno un valore PASSAGGI TOTALI AUTOVETTURE per una stessa data, quindi per includere tutte le sezioni che abbiano un dato sono costretta a inserire un secondo criterio intervallo temporale che includa le sezioni escluse con il primo criterio. A questo punto però con il secondo criterio ho incluso anche sezioni che hanno un valore PASSAGGI TOTALI AUTO in entrambe le date, e qui stà il problema, perche la mia query somma questi valori.
    Potresti rispiegarmelo con un recordset di molti valori che rendano davvero l'idea del problema?
  • Re: Criterio intervallo temporale

    Quindi nella tabella1 il numero SEZIONE è associato al corrispettivo NODO A e NODO B nelle due DIREZIONI "a" e "d"(le due direzioni sono l'una l' inversa del'altra), nella tabella2 ho tutti i rilevamenti di traffico divisi per CORSIE, DIREZIONI e RIFERIMENTI TEMPORALI INIZIALI data/ora
    FINE RIFERIMENTI TEMPORALI data/ora (periodo di rilevamento del dato). Con il JOIN metto in relazione SEZIONE e DIREZIONE.
    La formula per tutti i campi della query è Raggruppamento tranne che nel campo PASSAGGI TOTALI AUTO in cui sommo per iltervallo temporale.
    esempio tabella 1
    ID SEZIONE DIREZIONE NODO A NODO B INFO ID_SCRLINE FONTE CONF
    331 1 A 2985 3456 SS.. 0 .. ...
    332 1 D 3456 2985 SS.. 0 .. ...
    tabella 2
    SEZIONE RIFERIMENTO TEMPORALE INIZIALE FINE RIFERIMENTO TEMPORALE CORSIA DIREZIONE PASSAGGI TOTALI AUTO
    1 11/03/2019 07:00:00 11/03/2019 08:00:00 0 A 900
    1 11/03/2019 08:00:00 11/03/2019 09:00:00 0 A 278
    1 11/03/2019 07:00:00 11/03/2019 08:00:00 0 D 986
    1 11/03/2019 08:00:00 11/03/2019 09:00:00 0 D 945
    56 11/03/2019 07:00:00 11/03/2019 08:00:00 0 A 900
    56 11/03/2019 08:00:00 11/03/2019 09:00:00 0 A 278
    56 11/03/2019 07:00:00 11/03/2019 08:00:00 0 D 986
    56 11/03/2019 08:00:00 11/03/2019 09:00:00 0 D 945

    1 12/03/2019 07:00:00 11/03/2019 08:00:00 0 A 783
    1 12/03/2019 08:00:00 11/03/2019 09:00:00 0 A 60
    1 12/03/2019 07:00:00 11/03/2019 08:00:00 0 D 87
    1 12/03/2019 08:00:00 11/03/2019 09:00:00 0 D 652
    45 12/03/2019 07:00:00 11/03/2019 08:00:00 0 A 90
    45 12/03/2019 08:00:00 11/03/2019 09:00:00 0 A 267
    45 12/03/2019 07:00:00 11/03/2019 08:00:00 0 D 1
    45 12/03/2019 08:00:00 11/03/2019 09:00:00 0 D 34

    Ti ho riportato un subset delle tabelle.
    Quello che faccio con la mia Query è sommare PASSAGGI TOTALI AUTO ad esempio nell'intervallo di due ore dalle 07:00:00 alle 09:00:00 prendendo cioè due righe della tabella. Come in questo caso però ci sono sezioni come la 45 che hanno un dato solo per la data dell'12/03/2019 e che quindi devo inserire per avere il dato della sezione anche se in un giorno diverso. Allo stesso tempo però vado a beccare anche la sezione 1 di cui avevo gia il dato. L'errore della mia query sta proprio qui, il risultato per la sezione 1 è la somma dei PASSAGGI TOTALI AUTO della fascia bioraria del giorno 11 e del giorno 12.

    grazie per la tua pazienza
  • Re: Criterio intervallo temporale

    Aspetta, io sono abituato a dare denominazioni "standard" ai campi, pertanto rischiamo di non capirci.
    Tabella Sezioni deve avere un campo chiave primaria IDSezione. In tabella Passaggi devi avere un corrispondente campo IDSezione di tipo numerico. Poi occorre la relazione Sezioni.IDSezione uno-a-molti Passaggi.IDSezione. Fin qui ti ritrovi anche tu?

    Cos'è ID_SCRLINE?

    Ipazia ha scritto:


    Quindi nella tabella1 il numero SEZIONE è associato al corrispettivo NODO A e NODO B nelle due DIREZIONI "a" e "d"(le due direzioni sono l'una l' inversa del'altra), nella tabella2 ho tutti i rilevamenti di traffico divisi per CORSIE, DIREZIONI e RIFERIMENTI TEMPORALI INIZIALI data/ora
    Sembra chiaro, ma io non sono addetto ai tuoi lavori. Dovresti raccontarmelo meglio con qualche esempio pratico.
  • Re: Criterio intervallo temporale

    ID_SCRLINE è un sottogruppo di quelli che vengono chiamati conteggi cioè conteggi del numero di auto che passano in quell'arco stradale in un certo periodo di tempo, il campo è un numerico che identifica le zone stradali ma è irrilevante ai fini del problema.
    LA tabella che tu chiami Sezioni ha una chiave primaria invece la tabella PASSAGGI no, vedo di rimediare.
  • Re: Criterio intervallo temporale

    Dando una numerazione automatica ad un nuovo campo della tabella PASSAGGI rifiuta il salvataggio:messaggio errore
    SUPERATO IL NUMERO DI BLOCCHI PER LA CONDIVIZIONE DEI FILE.AUMENTARE LA VOCE DI REGISTRO MAXLOCKSPERFILE.
    Non trovo piu le emoticon per mostrarti la disperazione
  • Re: Criterio intervallo temporale

    Messaggio stranissimo. Non vorrei che tu hai già un altro campo di tipo "numerazione automatica"...e ciò crea incongruenze, conflitti e impossibilità di gestione della tabella stessa. In sostanza in una tabella ci può essere un solo campo di tipo numerazione automatica.
    Ad ogni modo, all'atto della nuova gestione relazionale delle due tabelle...Passaggi dovrà avere il suo campo numerico IDSezione e la relazione a seguire. Un bel casino...ad opera già messa in piedi.
  • Re: Criterio intervallo temporale

    Per quanto riguarda il giorno 12
    1 12/03/2019 07:00:00 11/03/2019 08:00:00 0 A 783
    1 12/03/2019 08:00:00 11/03/2019 09:00:00 0 A 60
    1 12/03/2019 07:00:00 11/03/2019 08:00:00 0 D 87
    1 12/03/2019 08:00:00 11/03/2019 09:00:00 0 D 652
    45 12/03/2019 07:00:00 11/03/2019 08:00:00 0 A 90
    45 12/03/2019 08:00:00 11/03/2019 09:00:00 0 A 267
    45 12/03/2019 07:00:00 11/03/2019 08:00:00 0 D 1
    45 12/03/2019 08:00:00 11/03/2019 09:00:00 0 D 34
    credo abbia commesso un errore nella trascrizione dei dati in quanto RIFERIMENTO TEMPORALE INIZIALE dovrebbe essere uguale a FINE RIFERIMENTO TEMPORALE, quindi 12/03/2019 e non 11/03/2019.
    Comunque, se il filtro dati viene fatto solo sull'intervallo orario è giusto che prenda i valori del giorno 11 e 12 se invece vuoi solo quelli solo del giorno 11 o del 12 devi filtrare anche per data.
  • Re: Criterio intervallo temporale

    Suggerirei al nuovo utente di riflettere sui NOMI atrribuiti ai campi delle tabelle, che non sono le celle di EXCEL ed hanno delle criticità specifiche sull'uso di caratteri speciali... come lo Spazio.
    Aggiungo che non si deve confondere il Nome degli oggetti di struttura del Database come Campi e Tabelle con quanto visualizzabile nelle maschere... ne con la funzione di DESCRIZIONE.
    Quindi quando vedo un campo chimato come sotto riporto, mi viene una scossa elettrica:
    RIFERIMENTO TEMPORALE FINALE
    Il campo va chiamato DateEnd oppure DataFine senza spazi , e con un numero di caratteri minimale ma chiaro, rifacendosi alla logica delle SIGLE PARLANTI, e non una descrizione tipo tema, che invece viene svolta vome funzione dalle Label nelle maschere o daglu ALIAS nelle Queeies.
    Mi
  • Re: Criterio intervallo temporale

    Alex grazie della tua risposta ma oltre il fatto che i miei nomi campo ti fanno ribrezzo c'è un motivo per cui non posso usare caratteri speciali ? Grazie
  • Re: Criterio intervallo temporale

    Ciao Stifone..ho commesso un errore nel campo data del mio esempio ovviamente. Grazie
  • Re: Criterio intervallo temporale

    Ipazia ha scritto:


    Alex grazie della tua risposta ma oltre il fatto che i miei nomi campo ti fanno ribrezzo c'è un motivo per cui non posso usare caratteri speciali ? Grazie
    Per chi è poco addentro agli aspetti Tecnici ed è abituato ad usare Excel, il problema non è molto percepito anzi per nulla, tuttavia dietro agli strumenti di lavoro ci sono parecchi documenti da STUDIARE prima di improvvisarsi programmatore, e gli aspetti di Nomenclatura abbracciano tutti i Linguaggi.

    In particolare ci sono sia regole di buon senso per la Nomenclatura degli Oggetti che si può decidere di far proprie ma non sono vincolanti ma che possono agevolare tutta una serie di operazioni di scrittura del codice e di manutenzione, ma direi che questi aspetti attingono più all'esperienza...
    Tuttavia ci sono delle REGOLE indicate dal Fornitore del prodotto che fanno parte della documentazione tecnica specifica che andrebbe letta e studiata prima, almeno io la penso così...

    Quello che ti ho accennato, ancorchè frutto di esperienza mia e sicuramente di chi normalmente ci lavora da anni, non è solo buon senso ma lo indica in prima battuta la MS, se per te è sufficiente, e lo puoi trovare ad esempio in questi 2 riferimenti:
    https://docs.microsoft.com/en-us/office/troubleshoot/access/error-using-special-characters
    https://support.microsoft.com/en-us/office/guidelines-for-naming-fields-controls-and-objects-120c27fa-7ae1-4182-9baa-dbd183179cc3

    L'uso dello Spazio, obbliga a considerare le sintassi di costruzione dei criteri, ad introdurre le parentesi QUADRE, altrimenti il testo non viene riconosciuto, ed ovviamente questo per chi rende le proprie applicazioni FLESSIBILI, è ingestibile o in ogni caso frutto di rogne inutili ed evitabili.

    Chiaramente ci sono molti altri aspetti da considerare...
Devi accedere o registrarti per scrivere nel forum
13 risposte