Query su base trimestrale

di il
37 risposte

37 Risposte - Pagina 3

  • Re: Query su base trimestrale

    Visto che a te interessano (stabilito l'intervallo temporale) i vari soggetti (identificati dal loro "ID") indipendentemente dal loro trattamento (quindi presi una sola volta) devi effettuare una "SELECT DISTINCT ..." in modo da ottenere "distintamente" i vari "ID" (ovvero averli non ripetuti).
    Un semplice esempio (di codice SQL per una query che magari denominiamo "QueryElencoSingoliIDPeriodo") può essere il seguente:
    
    SELECT DISTINCT date_trattamenti.ID
    FROM date_trattamenti
    GROUP BY date_trattamenti.ID, date_trattamenti.dal
    HAVING (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));
    
    in modo da ottenere:
    ID
    8
    9
    11
    A questo punto se vuoi conoscere il loro numero complessivo dovrai effettuare il relativo conteggio (basandosi sul codice SQL precedente) attraverso una nuova query:
    
    SELECT Count(QueryElencoSingoliIDPeriodo.ID) AS ConteggioDiID
    FROM QueryElencoSingoliIDPeriodo;
    
    ottendo così il conteggio dei soggetti interessati:
    ConteggioDiID
    3
    Lo stesso risultato lo puoi ottenere anche con una unica query (ove al suo interno vi sia la subquery) oppure sfruttando la funzione DCount, sui domini.
  • Re: Query su base trimestrale

    Non sò se ho letto bene tutto il thread ma oltre ad indicare il farmaco non dovresti salvare anche la quantità somministrata?
  • Re: Query su base trimestrale

    gian82 ha scritto:


    Non sò se ho letto bene tutto il thread ma oltre ad indicare il farmaco non dovresti salvare anche la quantità somministrata?
    non in questo db, quelle cose rimangono sl cartaceo
    E' una gestionecomplessa, la cartella cclinica con date e misurazioni si muove dall'ufficio accettazione all ambulatorio, ad oggi è impensabile farli lavorare su un db centralizzato che sostituisc ail cartaceo
    Quindi questodb serve a rilievi statistici, per mandare a fine trimestre un report alla prefettura sui soggetti trattati, secondo alcune caratteristiche, ad esempio eta, nazionalita, sostanza che assumono(non farmaco ma lo supefacente)
  • Re: Query su base trimestrale

    willy55 ha scritto:


    Visto che a te interessano (stabilito l'intervallo temporale) i vari soggetti (identificati dal loro "ID") indipendentemente dal loro trattamento (quindi presi una sola volta) devi effettuare una "SELECT DISTINCT ..." in modo da ottenere "distintamente" i vari "ID" (ovvero averli non ripetuti).
    Un semplice esempio (di codice SQL per una query che magari denominiamo "QueryElencoSingoliIDPeriodo") può essere il seguente:
    
    SELECT DISTINCT date_trattamenti.ID
    FROM date_trattamenti
    GROUP BY date_trattamenti.ID, date_trattamenti.dal
    HAVING (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));
    
    in modo da ottenere:
    ID
    8
    9
    11
    A questo punto se vuoi conoscere il loro numero complessivo dovrai effettuare il relativo conteggio (basandosi sul codice SQL precedente) attraverso una nuova query:
    
    SELECT Count(QueryElencoSingoliIDPeriodo.ID) AS ConteggioDiID
    FROM QueryElencoSingoliIDPeriodo;
    
    ottendo così il conteggio dei soggetti interessati:
    ConteggioDiID
    3
    Lo stesso risultato lo puoi ottenere anche con una unica query (ove al suo interno vi sia la subquery) oppure sfruttando la funzione DCount, sui domini.
    ok fino a qua ci siamo, questa è la prima selezione

    Adesso ho bisogno di fare altre query basate sui dati contenuti in un altra tabella, ad esempio etè, titolo di studio, occupazione ed altra, ricavare le femmine, i maschi e il totale per ciascuna di queste query, sempre all'interno del trimestre selezionato

    Mi chiedo come sia meglio procedere
    Partò prima dalla selezione primaria fatta con la query sul trimestre e poi tramite gli id ottenuti collego la query ottenuta alla tabella ANAGRFAICA(che contine gli altri campi)
    oppure conviene fare la query che contine le diverse interrogazioni in un unica volta?

    Le tablle DATE_TRATTAMENTI e ANAGRAFICA sono collegato tramite il campo ID che per ANAGRAFICA è anche chiave primaria
  • Re: Query su base trimestrale

    Probabilmente mi sono gia risposto
    con questa query seleziono tutti gli utenti di sesso femmina con titolo di studio licenza elementare
    SELECT DISTINCT date_trattamenti.ID, anagrafica.SESSO, anagrafica.[TITOLO DI STUDIO]
    FROM anagrafica INNER JOIN date_trattamenti ON anagrafica.Id = date_trattamenti.ID
    GROUP BY date_trattamenti.ID, anagrafica.SESSO, anagrafica.[TITOLO DI STUDIO], date_trattamenti.dal
    HAVING (((anagrafica.SESSO) Like "Femmina") AND ((anagrafica.[TITOLO DI STUDIO]) Like "Elementari") AND ((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));"
    poi uso la seconda query per contarle (oppur einserirla all interno della query che gia conta, ma non ho ben capito ancora come si fa
    poi dovro ripetere la query cper il sesso "Maschio" e infine sommarle

    Il problema è che sono tante ricerche e per tutto dovro fare la stessa cosa, doppia query maschio femmina e totale
    Non partuicolarmente complicato (a parte quella relativa all'età che analizzerà in seguito) ma laborioso, sono tante query, qualche strada per semplificare il tutto?
    Già annidare correttamente le due query di selezione e di conteggio dimezzerebbe il lavoro
  • Re: Query su base trimestrale

    stefanocps ha scritto:


    Mi chiedo come sia meglio procedere
    Parto prima dalla selezione primaria fatta con la query sul trimestre e poi tramite gli id ottenuti collego la query ottenuta alla tabella ANAGRAFICA (che contiene gli altri campi)
    oppure conviene fare la query che contiene le diverse interrogazioni in un unica volta?
    Ti consiglio la prima soluzione in quanto è sempre meglio procedere nella modalità "divide et impera" in modo da suddividere il problema, inoltre ottieni un insieme ridotto di dati, il quale comporta tempi più veloci, nella esecuzione della query conclusiva (quando si mettono in relazione le varie tabelle).

    Pertanto, rispetto al codice del tuo ultimo post, ti consiglio di procedere con una query che determini i soggetti (nei vari ID) che hanno subito trattamento nel periodo.
    Questa query (sarà comune alle varie esigenze) e la metterai in relazione con le varie tabelle per determinare i dati che di volta in volta ti interessano (eta, sesso, titolo di studio, ecc.) in modo da avere le specifiche query con i valori analitici o di relativo conteggio.
    Infine, per ottenere una sintesi complessiva potrai impiegare una maschera o report ove potrai avere l'insieme delle varie query poste, specificamente, in sotto-maschere o sotto-report (ove il conteggio può essere un risultato impostato non con query ma direttamente quale totalizzazione dei record presenti nei vari ambiti).
  • Re: Query su base trimestrale

    willy55 ha scritto:


    stefanocps ha scritto:


    Mi chiedo come sia meglio procedere
    Parto prima dalla selezione primaria fatta con la query sul trimestre e poi tramite gli id ottenuti collego la query ottenuta alla tabella ANAGRAFICA (che contiene gli altri campi)
    oppure conviene fare la query che contiene le diverse interrogazioni in un unica volta?
    Ti consiglio la prima soluzione in quanto è sempre meglio procedere nella modalità "divide et impera" in modo da suddividere il problema, inoltre ottieni un insieme ridotto di dati, il quale comporta tempi più veloci, nella esecuzione della query conclusiva (quando si mettono in relazione le varie tabelle).

    Pertanto, rispetto al codice del tuo ultimo post, ti consiglio di procedere con una query che determini i soggetti (nei vari ID) che hanno subito trattamento nel periodo.
    Questa query (sarà comune alle varie esigenze) e la metterai in relazione con le varie tabelle per determinare i dati che di volta in volta ti interessano (eta, sesso, titolo di studio, ecc.) in modo da avere le specifiche query con i valori analitici o di relativo conteggio.
    Infine, per ottenere una sintesi complessiva potrai impiegare una maschera o report ove potrai avere l'insieme delle varie query poste, specificamente, in sotto-maschere o sotto-report (ove il conteggio può essere un risultato impostato non con query ma direttamente quale totalizzazione dei record presenti nei vari ambiti).
    in effetti ogni query potra avere in genere 3 condizioni, una quella del tempo l'altra quella del sesso e l'altra che varia, forse non è tanto lavoro di codice
    Quello che cerco di capire è se c'è un modo di non scrivere decine di query, partendo da quei dati fissi (dati, sesso maschile e sesso femminile e quello variabile, una volta titolo di studio, una volta occupazione ecc...)
  • Re: Query su base trimestrale

    Allora, un aggiornamento , mi sono reso conto che interrogare solo il campo DAL non basta, un utente potrebbe iniziare e finire durante il trimestre, e per essere completamente sicuro di individuarlo ho aggiunto anche il fine trattamento
    SELECT DISTINCT date_trattamenti.ID
    FROM date_trattamenti
    GROUP BY date_trattamenti.ID, date_trattamenti.dal, date_trattamenti.al
    HAVING (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#)) OR (((date_trattamenti.al) Between #1/30/2018# And #12/30/2018#));
    
    Questa potrebbe essere la query di partenza su cui sviluppare tutte le altre
    SOno davvero tante pero cosi, me ne servono 4 per i 4 trimestri(finche non riesco a passare i valori varibili delle date da una maschera), moltiplicati per le diverse ricerche che sono forse un 50, moltiplicate per 2 (maschio e femmine) e moltiplicate per 2 (query di query per fare la somma)
    Oltre ad implentare la variabile per le date potrei costruire delle query che contengono gia la somma e forse anche il sesso
    Cosi avrei la query di query(che fa la somma) per maschi con le date variabili, e avrei la query di query(che fa la somma) per femmine con date variabili
    Da queste due svilupperei tutte le altre ricerche
    Che ne dite?mi serve una mano per costruire la query di query che faccia la somma, per query di query intendo tutto in una sola query, non una query che elabori un altra query
Devi accedere o registrarti per scrivere nel forum
37 risposte