Interrogare una Tabella in base ad due Campi con ID univoco.

di il
9 risposte

Interrogare una Tabella in base ad due Campi con ID univoco.

Salve a tutti e buon 2019,
Un DB fatto con ACCESS 2010 con una tabella (Tabella Creazioni) dove raccolgo i dati degli Utenti e le loro creazioni.
Ad ogni Utente ho assegnato un ID univoco.
In questa tabella ci sono naturalmente tanti record (tante creazioni) per ogni singolo Utente.
La Tabella Creazioni è composta dai seguenti campi:
Id Creazioni (campo chiave primaria a numerazione automatica)
Cognome (campo testo)
Nome (campo testo)
IDANAGRAFICA (campo numerico, codice univoco di cui parlavo sopra, che non è altro che un numero assegnato ad un Utente che è diverso per ognuno naturalmente)
Nato il (campo data)
Data creazione (campo data)
Tipo creazione (campo testo)
….
….
Ecc…

Quindi la Tabella Creazioni avrà tanti record e più precisamente ogni Utente avrà tanti record per ogni creazione effettuata, quindi ogni Utente avrà n. record.
Quello che mi serve fare è, interrogare la Tabella Creazioni per estrarre tutti gli Utenti con l’ultimo record inserito (mi serve farlo per tutti gli Utenti contemporaneamente per avere una situazione nell’insieme) senza farlo tramite il campo Data creazione (perchè la data potrebbe essere sbagliata) ma attraverso il campo IDANAGRAFICA (codice univoco di ogni Utente) e tramite il campo Id Creazioni, in modo da non avere errori perchè entrambi i campi sono univoci.
Quindi, ogni Utente potrà essere identificato nella tabella tramite il campo IDANAGRAFICA (codice univoco) e le relative creazioni tramite Id Creazioni, ma mi occorre solo l’ultima di ciascun Utente.
Avere come risultato un elenco con tutti gli Utenti con l’ultima creazione effettuata.
Ho in testa il concetto ma non riesco, ho provato con qualche riga di SQL ma non arrivo al risultato voluto.
Grazie

9 Risposte

  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Per me c'è un errore logico/strutturale.

    Utenti
    IDUtente (PK)
    Cognome
    Nome
    ...tanti altri campi tipicamente anagrafici…

    Creazioni
    IDCreazione (PK)
    DataCreazione
    NomeCreazione
    IDUtente (FK)

    Relazione Utenti.IDUtente uno-a-molti Creazioni.IDUtente

    Partiamo da qui, poi ci racconti di cosa hai bisogno.
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Grazie della risposta.

    Non sono due tabelle, tutti i dati sono in unica tabella: Tabella Creazioni
    Tabella composta dai campi come descritto in precedenza.

    Il campo IDANAGRAFICA è una spece di matricola assegnata ad ogni Utente per rendernolo univo nella tabella stessa.

    Preferirei una soluzione con unica Tabella, dovrebbe essere più facile, ma se così non fosse è un'attimo fare due tabelle con relazione come da te suggerito. Dimmi tu come è meglio. Grazie
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Nei database si applica la logica della NORMALIZZAZIONE. La normalizzazione è un insieme di regole che servono a ottimizzare un database. In una di queste regole bisogna evitare la "ridondanza/ripetizione" di dati su più campi. Nel tuo caso non devi ripetere Cognome, Nome ogni volta che Sanzio Raffaello crea una Creazione.
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Ok due tabelle, però hanno molti campi purtroppo con lo spazio nei nomi, riporto i nomi così come sono, (dovrò usare apice invero nella formattazione di eventuali codice SQL per colpa degli spazi) comunque procediamo.

    Tabella Anagrafica
    IDANAGRAFICA (PK)
    Cognome
    Nome
    Nato il
    ecc...


    Tabella Creazioni

    ID Creazione
    Nome Creazione
    Tipo Creazione
    Data Creazione
    IDANAGRAFICA (PK)
    ecc...

    Come dicevo vorrei avere come risultato elenco Utenti con ultima creazione, senza usare la Data Creazione, ma attraverso l' ID Creazione dell'ultima creazione di ciascun utente.
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    darki ha scritto:


    però hanno molti campi purtroppo con lo spazio nei nomi
    Non capisco. Fai qualche esempio.

    darki ha scritto:


    Come dicevo vorrei avere come risultato elenco Utenti con ultima creazione, senza usare la Data Creazione, ma attraverso l' ID Creazione dell'ultima creazione di ciascun utente.
    I campi IDCreazione e DataCreazione sono indipendenti. Non è detto che l'ordinamento IDCreazione sia coerente con quello di DataCreazione. Se vuoi gli ULTIMI devi far leva su DataCreazione...o dipende dalla tua esigenza...gli ultimi di IDCreazione.
    Devi creare una query, sfruttare la funzione Max o Last (se mantieni un certo coerente ordinamento).
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Esempio:Nato il
    era meglio se era senza spazio Natoil oppure Nato_il dicevo che quando ci sono spazi bisogna fare attenzione nella formattazione.

    Si si voglio far leva sull' IDCreazione, visto che è autoincrementante invece la data inserita a mano può essere un problema!

    Voglio fare una query che mi tiri fuori tutti gli Utenti e di ciascuno voglio l'ultima creazione in base appunto al' IDCreazione.
    Perchè ogni Utente avrà un'ultima creazione anche se per esempio vecchia di n.X tempo.
    Quindi richiamare tutti gli Utenti tramite il loro IDANAGRAFICA (tabella Anagrafica) e richiamare la sua ultima creazione in base all' IDCreazione (tabella Creazioni).
    Pertanto,se per esempio la tabella Anagrafica ha 10 Utenti (10 record), mentre la tabella Creazioni avrà tante creazioni (appartenenti ai 10 Utenti), vorrei fare quindi, una query per estrarre tutti i 10 Utenti e la loro ultima creazione.
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    darki ha scritto:


    Esempio:Nato il era meglio se era senza spazio Natoil oppure Nato_il dicevo che quando ci sono spazi bisogna fare attenzione nella formattazione.
    Si preferisce sempre senza spazio. Uno qualsiasi dei due che hai proposto va bene.

    Prova questa query "minimalista":
    1. Crea una query in visualizzazione struttura
    2. Importa la tabella Creazioni
    3. Trascina i campi IDCreazione e IDAnagrafica
    4. Clicca in alto sul tasto Totali
    5. In corrispondenza di IDCreazione scegli Max, in corrispondenza di IDAnagrafica scegli Raggruppamento
    6. Salva tutto
    7. Esegui la query e vedi se restituisce il recordset da te atteso
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Ho provato solo ora.
    Ho provato solo con i due campi IDCreazione impostato su Max e IDAnagrafica impostato su Raggruppamento funziona.
    Poi ho provato aggiungendo gli altri campi della tabella Creazioni per avere il risultato da me atteso li ho dovuti impostare tutti su Max, è normale?
    Comunque sembra che funziona ma devo fare altre prove di conferma.
    Ci sono altri metodi o suggerimenti?
    Grazie mille già per questo risultato.
  • Re: Interrogare una Tabella in base ad due Campi con ID univoco.

    Quello di mettere Max a tutti gli altri campi non risolve. Ho fatto dei test anch'io e l'unica soluzione valida che mi è tornata è la seguente:
    1. Salva la query con i soli 2 campi IDCreazione e IDAnagrafica come ti ho suggerito: Query1
    2. Crea una nuova query dove importi Query1 e Creazioni
    3. Unisci una linea di join da MaxDiIDCreazione verso Creazioni.IDCreazioni
    4. Trascina nella griglia tutti i campi che vuoi vedere da Creazioni
    5. Salva con nome Query2
Devi accedere o registrarti per scrivere nel forum
9 risposte