TSQL Ottenere da una tabella secondaria un solo risultato

di il
7 risposte

TSQL Ottenere da una tabella secondaria un solo risultato

Buongiorno,

ho due tabelle

1) anagrafica (tabella primaria)
id,
nome

2) attestato_nuoto (tabella secondaria 1:N)
id,
id_anagrafica,
data_conseguimento,
data_prossima_scadenza

SELECT
01.nome, 02.data_conseguimento
FROM anagrafica 01 INNER JOIN
attestato_nuoto 02 ON (01.id= 02.id_anagrafica)

Per ogni anagrafica ottengo tutti gli attestati, ma io vorrei solo un record per ogni anagrafica (ovvero quello con data maggiore)

Potreste aiutarmi?
Grazie

7 Risposte

  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Prova con MAX(02.data_conseguimento) e poi fai la GROUP By per 01.nome
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Grazie per la risposta.

    La query sotto funziona correttamente:

    SELECT
    01.nome, MAX(02.data_conseguimento)
    FROM anagrafica 01 INNER JOIN
    attestato_nuoto 02 ON (01.id= 02.id_anagrafica)
    GROUP BY 01.nome
    ORDER BY 01.nome DESC

    TI chiedo un altra cosa.
    Se volessi dire che nella query devono comparire solo le date passate "02.data_conseguimento < getdate()" come posso fare?

    La seguente non funziona:
    SELECT
    01.nome, MAX(02.data_conseguimento)
    FROM anagrafica 01 INNER JOIN
    attestato_nuoto 02 ON (01.id= 02.id_anagrafica)
    WHERE
    MAX(02.data_conseguimento) <= Getdate()
    GROUP BY 01.nome
    ORDER BY 01.nome DESC

    Potreste aiutarmi?
    Grazie
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Sinceramente non ho ben capito cosa vuoi ottenere, ma non capisco cmq il senso della MAX nella WHERE.
    Prova a toglierla
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Utilizzando la query sotto ottengo correttamente per ogni anagrafica un solo attestato (con la data maggiore):

    SELECT 01.nome, MAX(02.data_conseguimento)
    FROM anagrafica 01 INNER JOIN attestato_nuoto 02 ON (01.id= 02.id_anagrafica)
    GROUP BY 01.nome
    ORDER BY 01.nome DESC

    Ma io vorrei filtrare ulteriormente questi record, ovvero vedere solo i record con "data_conseguimento" <= getdate().

    se metto WHERE 02.data_conseguimento <= Getdate() salta la funzione MAX() che c'è nel select
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    neotrojan ha scritto:


    Ma io vorrei filtrare ulteriormente questi record, ovvero vedere solo i record con "data_conseguimento" <= getdate().
    se metto WHERE 02.data_conseguimento <= Getdate() salta la funzione MAX() che c'è nel select
    La Where in questo caso filtra tutte le date minori uguali di GETDATE().
    La MAX nella select preleva solo la maggiore tra quelle filtrate nella condizione.
    Ti riporto un esempio tra tabella fattura ed anagrafica clienti:
    USE [SqlBoat]
    GO
    
    SELECT Fatture.F_Cli, MAX(Fatture.F_Data), Clienti.cli_ragionesociale
    FROM Fatture INNER JOIN
     Clienti ON Fatture.F_Cli = Clienti.cli_ID
    WHERE (Fatture.F_Data < GETDATE())
    GROUP BY Fatture.F_Cli, Clienti.cli_ragionesociale
    ORDER BY Fatture.F_Cli
    GO
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Quello che (probabilmente) ti serve è la clausola HAVING:
    
    SELECT 01.nome, MAX(02.data_conseguimento)
    FROM anagrafica 01 INNER JOIN attestato_nuoto 02 ON (01.id= 02.id_anagrafica)
    GROUP BY 01.nome
    HAVING MAX(02.data_conseguimento) < GETDATE()
    ORDER BY 01.nome DESC
    
    Se stai chiedendo di vedere tutte le persone che non hanno conseguito un attestato oggi (ciascuna con la propria data di "ultimo conseguimento") allora la query di MaxMag64 non va bene perchè fa una cosa diversa: prima butta via tutte le date uguali ad oggi (immagino non ce ne siano di "future") e poi di quelle che rimangono prende il MAX...

    Quindi, se "Mario Rossi" ha conseguito 2 attestati, uno ieri ed uno oggi, con la query di MaxMag64 ti compare "Mario Rossi" con la data di ieri, con la mia "Mario Rossi" non compare perchè ha un attestato conseguito oggi.
    Quale che sia la tua specifica richiesta non lo so, vedi tu.


    Ciao.
  • Re: TSQL Ottenere da una tabella secondaria un solo risultato

    Grazie per le risposte. Mi hanno dato modo di approfondire alcuni aspetti.
Devi accedere o registrarti per scrivere nel forum
7 risposte